three-stdlib 2.35.5 → 2.35.6
Sign up to get free protection for your applications and to get access to all the features.
- package/_polyfill/CapsuleGeometry.cjs +20 -17
- package/_polyfill/CapsuleGeometry.cjs.map +1 -1
- package/_polyfill/CapsuleGeometry.js +20 -17
- package/_polyfill/CapsuleGeometry.js.map +1 -1
- package/_polyfill/constants.cjs +1 -1
- package/_polyfill/constants.cjs.map +1 -1
- package/_polyfill/constants.js +1 -1
- package/_polyfill/constants.js.map +1 -1
- package/animation/AnimationClipCreator.cjs +13 -13
- package/animation/AnimationClipCreator.cjs.map +1 -1
- package/animation/AnimationClipCreator.js +13 -13
- package/animation/AnimationClipCreator.js.map +1 -1
- package/animation/CCDIKSolver.cjs +11 -11
- package/animation/CCDIKSolver.cjs.map +1 -1
- package/animation/CCDIKSolver.js +12 -12
- package/animation/CCDIKSolver.js.map +1 -1
- package/animation/MMDAnimationHelper.cjs +1 -1
- package/animation/MMDAnimationHelper.cjs.map +1 -1
- package/animation/MMDAnimationHelper.js +1 -1
- package/animation/MMDAnimationHelper.js.map +1 -1
- package/animation/MMDPhysics.cjs +4 -4
- package/animation/MMDPhysics.cjs.map +1 -1
- package/animation/MMDPhysics.js +4 -4
- package/animation/MMDPhysics.js.map +1 -1
- package/controls/ArcballControls.cjs +2 -2
- package/controls/ArcballControls.cjs.map +1 -1
- package/controls/ArcballControls.js +3 -3
- package/controls/ArcballControls.js.map +1 -1
- package/controls/FirstPersonControls.cjs +1 -1
- package/controls/FirstPersonControls.cjs.map +1 -1
- package/controls/FirstPersonControls.js +1 -1
- package/controls/FirstPersonControls.js.map +1 -1
- package/controls/OrbitControls.cjs +2 -2
- package/controls/OrbitControls.cjs.map +1 -1
- package/controls/OrbitControls.js +3 -3
- package/controls/OrbitControls.js.map +1 -1
- package/controls/PointerLockControls.cjs +2 -2
- package/controls/PointerLockControls.cjs.map +1 -1
- package/controls/PointerLockControls.js +3 -3
- package/controls/PointerLockControls.js.map +1 -1
- package/csm/CSM.cjs +4 -4
- package/csm/CSM.cjs.map +1 -1
- package/csm/CSM.js +5 -5
- package/csm/CSM.js.map +1 -1
- package/csm/CSMFrustum.cjs +1 -1
- package/csm/CSMFrustum.cjs.map +1 -1
- package/csm/CSMFrustum.js +2 -2
- package/csm/CSMFrustum.js.map +1 -1
- package/deprecated/Geometry.cjs +722 -715
- package/deprecated/Geometry.cjs.map +1 -1
- package/deprecated/Geometry.js +723 -716
- package/deprecated/Geometry.js.map +1 -1
- package/effects/AnaglyphEffect.cjs +2 -1
- package/effects/AnaglyphEffect.cjs.map +1 -1
- package/effects/AnaglyphEffect.js +3 -2
- package/effects/AnaglyphEffect.js.map +1 -1
- package/effects/OutlineEffect.cjs +2 -1
- package/effects/OutlineEffect.cjs.map +1 -1
- package/effects/OutlineEffect.js +3 -2
- package/effects/OutlineEffect.js.map +1 -1
- package/effects/ParallaxBarrierEffect.cjs +2 -1
- package/effects/ParallaxBarrierEffect.cjs.map +1 -1
- package/effects/ParallaxBarrierEffect.js +3 -2
- package/effects/ParallaxBarrierEffect.js.map +1 -1
- package/exporters/DRACOExporter.cjs +133 -122
- package/exporters/DRACOExporter.cjs.map +1 -1
- package/exporters/DRACOExporter.d.ts +34 -21
- package/exporters/DRACOExporter.js +133 -122
- package/exporters/DRACOExporter.js.map +1 -1
- package/exporters/GLTFExporter.cjs +170 -167
- package/exporters/GLTFExporter.cjs.map +1 -1
- package/exporters/GLTFExporter.js +170 -167
- package/exporters/GLTFExporter.js.map +1 -1
- package/geometries/LightningStrike.cjs +524 -515
- package/geometries/LightningStrike.cjs.map +1 -1
- package/geometries/LightningStrike.js +524 -515
- package/geometries/LightningStrike.js.map +1 -1
- package/geometries/RoundedBoxGeometry.cjs +1 -1
- package/geometries/RoundedBoxGeometry.cjs.map +1 -1
- package/geometries/RoundedBoxGeometry.js +2 -2
- package/geometries/RoundedBoxGeometry.js.map +1 -1
- package/helpers/RaycasterHelper.cjs +2 -2
- package/helpers/RaycasterHelper.cjs.map +1 -1
- package/helpers/RaycasterHelper.js +3 -3
- package/helpers/RaycasterHelper.js.map +1 -1
- package/helpers/VertexNormalsHelper.cjs +3 -3
- package/helpers/VertexNormalsHelper.cjs.map +1 -1
- package/helpers/VertexNormalsHelper.js +4 -4
- package/helpers/VertexNormalsHelper.js.map +1 -1
- package/helpers/VertexTangentsHelper.cjs +2 -2
- package/helpers/VertexTangentsHelper.cjs.map +1 -1
- package/helpers/VertexTangentsHelper.js +3 -3
- package/helpers/VertexTangentsHelper.js.map +1 -1
- package/interactive/InteractiveGroup.cjs +1 -1
- package/interactive/InteractiveGroup.cjs.map +1 -1
- package/interactive/InteractiveGroup.js +2 -2
- package/interactive/InteractiveGroup.js.map +1 -1
- package/interactive/SelectionBox.cjs +15 -15
- package/interactive/SelectionBox.cjs.map +1 -1
- package/interactive/SelectionBox.js +16 -16
- package/interactive/SelectionBox.js.map +1 -1
- package/libs/chevrotain.cjs +1 -1
- package/libs/chevrotain.cjs.map +1 -1
- package/libs/chevrotain.js +1 -1
- package/libs/chevrotain.js.map +1 -1
- package/libs/lottie.cjs +1 -1
- package/libs/lottie.cjs.map +1 -1
- package/libs/lottie.js +1 -1
- package/libs/lottie.js.map +1 -1
- package/libs/opentype.cjs +1 -1
- package/libs/opentype.cjs.map +1 -1
- package/libs/opentype.js +1 -1
- package/libs/opentype.js.map +1 -1
- package/lights/LightProbeGenerator.cjs +5 -5
- package/lights/LightProbeGenerator.cjs.map +1 -1
- package/lights/LightProbeGenerator.js +5 -5
- package/lights/LightProbeGenerator.js.map +1 -1
- package/lights/RectAreaLightUniformsLib.cjs +3 -3
- package/lights/RectAreaLightUniformsLib.cjs.map +1 -1
- package/lights/RectAreaLightUniformsLib.js +3 -3
- package/lights/RectAreaLightUniformsLib.js.map +1 -1
- package/lines/LineMaterial.cjs +2 -1
- package/lines/LineMaterial.cjs.map +1 -1
- package/lines/LineMaterial.js +3 -2
- package/lines/LineMaterial.js.map +1 -1
- package/lines/LineSegments2.cjs +13 -13
- package/lines/LineSegments2.cjs.map +1 -1
- package/lines/LineSegments2.js +14 -14
- package/lines/LineSegments2.js.map +1 -1
- package/lines/LineSegmentsGeometry.cjs +2 -2
- package/lines/LineSegmentsGeometry.cjs.map +1 -1
- package/lines/LineSegmentsGeometry.js +3 -3
- package/lines/LineSegmentsGeometry.js.map +1 -1
- package/lines/Wireframe.cjs +3 -3
- package/lines/Wireframe.cjs.map +1 -1
- package/lines/Wireframe.js +4 -4
- package/lines/Wireframe.js.map +1 -1
- package/loaders/BasisTextureLoader.cjs +441 -435
- package/loaders/BasisTextureLoader.cjs.map +1 -1
- package/loaders/BasisTextureLoader.js +441 -435
- package/loaders/BasisTextureLoader.js.map +1 -1
- package/loaders/EXRLoader.cjs +2 -1
- package/loaders/EXRLoader.cjs.map +1 -1
- package/loaders/EXRLoader.js +3 -2
- package/loaders/EXRLoader.js.map +1 -1
- package/loaders/FBXLoader.cjs +2 -2
- package/loaders/FBXLoader.cjs.map +1 -1
- package/loaders/FBXLoader.js +2 -2
- package/loaders/FBXLoader.js.map +1 -1
- package/loaders/FontLoader.cjs +2 -2
- package/loaders/FontLoader.cjs.map +1 -1
- package/loaders/FontLoader.d.ts +2 -2
- package/loaders/FontLoader.js +2 -2
- package/loaders/FontLoader.js.map +1 -1
- package/loaders/GLTFLoader.cjs +2 -2
- package/loaders/GLTFLoader.cjs.map +1 -1
- package/loaders/GLTFLoader.js +2 -2
- package/loaders/GLTFLoader.js.map +1 -1
- package/loaders/KTX2Loader.cjs +377 -374
- package/loaders/KTX2Loader.cjs.map +1 -1
- package/loaders/KTX2Loader.js +377 -374
- package/loaders/KTX2Loader.js.map +1 -1
- package/loaders/LDrawLoader.cjs +5 -4
- package/loaders/LDrawLoader.cjs.map +1 -1
- package/loaders/LDrawLoader.js +6 -5
- package/loaders/LDrawLoader.js.map +1 -1
- package/loaders/OBJLoader.cjs +5 -5
- package/loaders/OBJLoader.cjs.map +1 -1
- package/loaders/OBJLoader.js +6 -6
- package/loaders/OBJLoader.js.map +1 -1
- package/loaders/PRWMLoader.cjs +46 -43
- package/loaders/PRWMLoader.cjs.map +1 -1
- package/loaders/PRWMLoader.js +46 -43
- package/loaders/PRWMLoader.js.map +1 -1
- package/loaders/SVGLoader.cjs +1694 -1688
- package/loaders/SVGLoader.cjs.map +1 -1
- package/loaders/SVGLoader.js +1694 -1688
- package/loaders/SVGLoader.js.map +1 -1
- package/loaders/XLoader.cjs +1 -1
- package/loaders/XLoader.cjs.map +1 -1
- package/loaders/XLoader.js +1 -1
- package/loaders/XLoader.js.map +1 -1
- package/math/Capsule.cjs +3 -3
- package/math/Capsule.cjs.map +1 -1
- package/math/Capsule.js +3 -3
- package/math/Capsule.js.map +1 -1
- package/math/ColorConverter.cjs +9 -9
- package/math/ColorConverter.cjs.map +1 -1
- package/math/ColorConverter.js +9 -9
- package/math/ColorConverter.js.map +1 -1
- package/math/ConvexHull.cjs +53 -50
- package/math/ConvexHull.cjs.map +1 -1
- package/math/ConvexHull.js +53 -50
- package/math/ConvexHull.js.map +1 -1
- package/math/ImprovedNoise.cjs +1 -1
- package/math/ImprovedNoise.cjs.map +1 -1
- package/math/ImprovedNoise.js +1 -1
- package/math/ImprovedNoise.js.map +1 -1
- package/math/MeshSurfaceSampler.cjs +2 -2
- package/math/MeshSurfaceSampler.cjs.map +1 -1
- package/math/MeshSurfaceSampler.js +2 -2
- package/math/MeshSurfaceSampler.js.map +1 -1
- package/math/OBB.cjs +14 -14
- package/math/OBB.cjs.map +1 -1
- package/math/OBB.js +15 -15
- package/math/OBB.js.map +1 -1
- package/math/Octree.cjs +7 -7
- package/math/Octree.cjs.map +1 -1
- package/math/Octree.js +8 -8
- package/math/Octree.js.map +1 -1
- package/misc/ConvexObjectBreaker.cjs +271 -268
- package/misc/ConvexObjectBreaker.cjs.map +1 -1
- package/misc/ConvexObjectBreaker.js +272 -269
- package/misc/ConvexObjectBreaker.js.map +1 -1
- package/misc/Gyroscope.cjs +6 -6
- package/misc/Gyroscope.cjs.map +1 -1
- package/misc/Gyroscope.js +7 -7
- package/misc/Gyroscope.js.map +1 -1
- package/modifiers/CurveModifier.cjs +1 -1
- package/modifiers/CurveModifier.cjs.map +1 -1
- package/modifiers/CurveModifier.js +2 -2
- package/modifiers/CurveModifier.js.map +1 -1
- package/modifiers/SimplifyModifier.cjs +2 -2
- package/modifiers/SimplifyModifier.cjs.map +1 -1
- package/modifiers/SimplifyModifier.js +2 -2
- package/modifiers/SimplifyModifier.js.map +1 -1
- package/objects/BatchedMesh.cjs +2 -2
- package/objects/BatchedMesh.cjs.map +1 -1
- package/objects/BatchedMesh.js +3 -3
- package/objects/BatchedMesh.js.map +1 -1
- package/objects/GroundProjectedEnv.cjs +2 -1
- package/objects/GroundProjectedEnv.cjs.map +1 -1
- package/objects/GroundProjectedEnv.js +3 -2
- package/objects/GroundProjectedEnv.js.map +1 -1
- package/objects/Lensflare.cjs +209 -206
- package/objects/Lensflare.cjs.map +1 -1
- package/objects/Lensflare.js +209 -206
- package/objects/Lensflare.js.map +1 -1
- package/objects/Reflector.cjs +154 -146
- package/objects/Reflector.cjs.map +1 -1
- package/objects/Reflector.js +154 -146
- package/objects/Reflector.js.map +1 -1
- package/objects/ReflectorForSSRPass.cjs +183 -180
- package/objects/ReflectorForSSRPass.cjs.map +1 -1
- package/objects/ReflectorForSSRPass.js +183 -180
- package/objects/ReflectorForSSRPass.js.map +1 -1
- package/objects/Refractor.cjs +164 -161
- package/objects/Refractor.cjs.map +1 -1
- package/objects/Refractor.js +164 -161
- package/objects/Refractor.js.map +1 -1
- package/objects/ShadowMesh.cjs +1 -1
- package/objects/ShadowMesh.cjs.map +1 -1
- package/objects/ShadowMesh.js +2 -2
- package/objects/ShadowMesh.js.map +1 -1
- package/objects/Sky.cjs +35 -32
- package/objects/Sky.cjs.map +1 -1
- package/objects/Sky.d.ts +17 -42
- package/objects/Sky.js +35 -32
- package/objects/Sky.js.map +1 -1
- package/objects/Water.cjs +2 -1
- package/objects/Water.cjs.map +1 -1
- package/objects/Water.js +3 -2
- package/objects/Water.js.map +1 -1
- package/objects/Water2.cjs +143 -140
- package/objects/Water2.cjs.map +1 -1
- package/objects/Water2.js +143 -140
- package/objects/Water2.js.map +1 -1
- package/package.json +1 -1
- package/postprocessing/SAOPass.cjs +267 -264
- package/postprocessing/SAOPass.cjs.map +1 -1
- package/postprocessing/SAOPass.js +267 -264
- package/postprocessing/SAOPass.js.map +1 -1
- package/postprocessing/SSAOPass.cjs +253 -250
- package/postprocessing/SSAOPass.cjs.map +1 -1
- package/postprocessing/SSAOPass.js +253 -250
- package/postprocessing/SSAOPass.js.map +1 -1
- package/postprocessing/SSRPass.cjs +379 -376
- package/postprocessing/SSRPass.cjs.map +1 -1
- package/postprocessing/SSRPass.js +379 -376
- package/postprocessing/SSRPass.js.map +1 -1
- package/postprocessing/UnrealBloomPass.cjs +205 -202
- package/postprocessing/UnrealBloomPass.cjs.map +1 -1
- package/postprocessing/UnrealBloomPass.js +205 -202
- package/postprocessing/UnrealBloomPass.js.map +1 -1
- package/renderers/CSS2DRenderer.cjs +5 -5
- package/renderers/CSS2DRenderer.cjs.map +1 -1
- package/renderers/CSS2DRenderer.js +5 -5
- package/renderers/CSS2DRenderer.js.map +1 -1
- package/renderers/CSS3DRenderer.cjs +5 -5
- package/renderers/CSS3DRenderer.cjs.map +1 -1
- package/renderers/CSS3DRenderer.js +6 -6
- package/renderers/CSS3DRenderer.js.map +1 -1
- package/shaders/ACESFilmicToneMappingShader.cjs +71 -46
- package/shaders/ACESFilmicToneMappingShader.cjs.map +1 -1
- package/shaders/ACESFilmicToneMappingShader.js +71 -46
- package/shaders/ACESFilmicToneMappingShader.js.map +1 -1
- package/shaders/AfterimageShader.cjs +41 -22
- package/shaders/AfterimageShader.cjs.map +1 -1
- package/shaders/AfterimageShader.js +41 -22
- package/shaders/AfterimageShader.js.map +1 -1
- package/shaders/BasicShader.cjs +20 -6
- package/shaders/BasicShader.cjs.map +1 -1
- package/shaders/BasicShader.js +20 -6
- package/shaders/BasicShader.js.map +1 -1
- package/shaders/BleachBypassShader.cjs +46 -26
- package/shaders/BleachBypassShader.cjs.map +1 -1
- package/shaders/BleachBypassShader.js +46 -26
- package/shaders/BleachBypassShader.js.map +1 -1
- package/shaders/BlendShader.cjs +33 -19
- package/shaders/BlendShader.cjs.map +1 -1
- package/shaders/BlendShader.js +33 -19
- package/shaders/BlendShader.js.map +1 -1
- package/shaders/BokehShader.cjs +117 -90
- package/shaders/BokehShader.cjs.map +1 -1
- package/shaders/BokehShader.js +117 -90
- package/shaders/BokehShader.js.map +1 -1
- package/shaders/BokehShader2.cjs +333 -232
- package/shaders/BokehShader2.cjs.map +1 -1
- package/shaders/BokehShader2.js +333 -232
- package/shaders/BokehShader2.js.map +1 -1
- package/shaders/BrightnessContrastShader.cjs +38 -22
- package/shaders/BrightnessContrastShader.cjs.map +1 -1
- package/shaders/BrightnessContrastShader.js +38 -22
- package/shaders/BrightnessContrastShader.js.map +1 -1
- package/shaders/ColorCorrectionShader.cjs +35 -21
- package/shaders/ColorCorrectionShader.cjs.map +1 -1
- package/shaders/ColorCorrectionShader.js +35 -21
- package/shaders/ColorCorrectionShader.js.map +1 -1
- package/shaders/ColorifyShader.cjs +34 -19
- package/shaders/ColorifyShader.cjs.map +1 -1
- package/shaders/ColorifyShader.js +34 -19
- package/shaders/ColorifyShader.js.map +1 -1
- package/shaders/ConvolutionShader.cjs +43 -24
- package/shaders/ConvolutionShader.cjs.map +1 -1
- package/shaders/ConvolutionShader.js +43 -24
- package/shaders/ConvolutionShader.js.map +1 -1
- package/shaders/CopyShader.cjs +30 -16
- package/shaders/CopyShader.cjs.map +1 -1
- package/shaders/CopyShader.js +30 -16
- package/shaders/CopyShader.js.map +1 -1
- package/shaders/DOFMipMapShader.cjs +38 -21
- package/shaders/DOFMipMapShader.cjs.map +1 -1
- package/shaders/DOFMipMapShader.js +38 -21
- package/shaders/DOFMipMapShader.js.map +1 -1
- package/shaders/DepthLimitedBlurShader.cjs +98 -69
- package/shaders/DepthLimitedBlurShader.cjs.map +1 -1
- package/shaders/DepthLimitedBlurShader.js +98 -69
- package/shaders/DepthLimitedBlurShader.js.map +1 -1
- package/shaders/DigitalGlitch.cjs +70 -59
- package/shaders/DigitalGlitch.cjs.map +1 -1
- package/shaders/DigitalGlitch.js +70 -59
- package/shaders/DigitalGlitch.js.map +1 -1
- package/shaders/DotScreenShader.cjs +49 -28
- package/shaders/DotScreenShader.cjs.map +1 -1
- package/shaders/DotScreenShader.js +49 -28
- package/shaders/DotScreenShader.js.map +1 -1
- package/shaders/FXAAShader.cjs +1098 -1089
- package/shaders/FXAAShader.cjs.map +1 -1
- package/shaders/FXAAShader.js +1098 -1089
- package/shaders/FXAAShader.js.map +1 -1
- package/shaders/FilmShader.cjs +57 -29
- package/shaders/FilmShader.cjs.map +1 -1
- package/shaders/FilmShader.js +57 -29
- package/shaders/FilmShader.js.map +1 -1
- package/shaders/FocusShader.cjs +70 -43
- package/shaders/FocusShader.cjs.map +1 -1
- package/shaders/FocusShader.js +70 -43
- package/shaders/FocusShader.js.map +1 -1
- package/shaders/FreiChenShader.cjs +74 -53
- package/shaders/FreiChenShader.cjs.map +1 -1
- package/shaders/FreiChenShader.js +74 -53
- package/shaders/FreiChenShader.js.map +1 -1
- package/shaders/FresnelShader.cjs +55 -35
- package/shaders/FresnelShader.cjs.map +1 -1
- package/shaders/FresnelShader.js +55 -35
- package/shaders/FresnelShader.js.map +1 -1
- package/shaders/GammaCorrectionShader.cjs +33 -19
- package/shaders/GammaCorrectionShader.cjs.map +1 -1
- package/shaders/GammaCorrectionShader.js +33 -19
- package/shaders/GammaCorrectionShader.js.map +1 -1
- package/shaders/GodRaysShader.cjs +193 -116
- package/shaders/GodRaysShader.cjs.map +1 -1
- package/shaders/GodRaysShader.js +193 -116
- package/shaders/GodRaysShader.js.map +1 -1
- package/shaders/HalftoneShader.cjs +270 -192
- package/shaders/HalftoneShader.cjs.map +1 -1
- package/shaders/HalftoneShader.js +270 -192
- package/shaders/HalftoneShader.js.map +1 -1
- package/shaders/HorizontalTiltShiftShader.cjs +43 -27
- package/shaders/HorizontalTiltShiftShader.cjs.map +1 -1
- package/shaders/HorizontalTiltShiftShader.js +43 -27
- package/shaders/HorizontalTiltShiftShader.js.map +1 -1
- package/shaders/HueSaturationShader.cjs +47 -31
- package/shaders/HueSaturationShader.cjs.map +1 -1
- package/shaders/HueSaturationShader.js +47 -31
- package/shaders/HueSaturationShader.js.map +1 -1
- package/shaders/KaleidoShader.cjs +37 -24
- package/shaders/KaleidoShader.cjs.map +1 -1
- package/shaders/KaleidoShader.js +37 -24
- package/shaders/KaleidoShader.js.map +1 -1
- package/shaders/LuminosityHighPassShader.cjs +43 -24
- package/shaders/LuminosityHighPassShader.cjs.map +1 -1
- package/shaders/LuminosityHighPassShader.js +43 -24
- package/shaders/LuminosityHighPassShader.js.map +1 -1
- package/shaders/LuminosityShader.cjs +34 -17
- package/shaders/LuminosityShader.cjs.map +1 -1
- package/shaders/LuminosityShader.js +34 -17
- package/shaders/LuminosityShader.js.map +1 -1
- package/shaders/MirrorShader.cjs +39 -26
- package/shaders/MirrorShader.cjs.map +1 -1
- package/shaders/MirrorShader.js +39 -26
- package/shaders/MirrorShader.js.map +1 -1
- package/shaders/NormalMapShader.cjs +36 -21
- package/shaders/NormalMapShader.cjs.map +1 -1
- package/shaders/NormalMapShader.js +36 -21
- package/shaders/NormalMapShader.js.map +1 -1
- package/shaders/ParallaxShader.cjs +147 -97
- package/shaders/ParallaxShader.cjs.map +1 -1
- package/shaders/ParallaxShader.js +147 -97
- package/shaders/ParallaxShader.js.map +1 -1
- package/shaders/PixelShader.cjs +31 -18
- package/shaders/PixelShader.cjs.map +1 -1
- package/shaders/PixelShader.js +31 -18
- package/shaders/PixelShader.js.map +1 -1
- package/shaders/RGBShiftShader.cjs +33 -20
- package/shaders/RGBShiftShader.cjs.map +1 -1
- package/shaders/RGBShiftShader.js +33 -20
- package/shaders/RGBShiftShader.js.map +1 -1
- package/shaders/SAOShader.cjs +154 -117
- package/shaders/SAOShader.cjs.map +1 -1
- package/shaders/SAOShader.js +154 -117
- package/shaders/SAOShader.js.map +1 -1
- package/shaders/SMAAShader.cjs +358 -270
- package/shaders/SMAAShader.cjs.map +1 -1
- package/shaders/SMAAShader.js +358 -270
- package/shaders/SMAAShader.js.map +1 -1
- package/shaders/SSAOShader.cjs +236 -142
- package/shaders/SSAOShader.cjs.map +1 -1
- package/shaders/SSAOShader.js +236 -142
- package/shaders/SSAOShader.js.map +1 -1
- package/shaders/SSRShader.cjs +4 -4
- package/shaders/SSRShader.cjs.map +1 -1
- package/shaders/SSRShader.js +4 -4
- package/shaders/SSRShader.js.map +1 -1
- package/shaders/SepiaShader.cjs +36 -20
- package/shaders/SepiaShader.cjs.map +1 -1
- package/shaders/SepiaShader.js +36 -20
- package/shaders/SepiaShader.js.map +1 -1
- package/shaders/SobelOperatorShader.cjs +64 -37
- package/shaders/SobelOperatorShader.cjs.map +1 -1
- package/shaders/SobelOperatorShader.js +64 -37
- package/shaders/SobelOperatorShader.js.map +1 -1
- package/shaders/TechnicolorShader.cjs +29 -16
- package/shaders/TechnicolorShader.cjs.map +1 -1
- package/shaders/TechnicolorShader.js +29 -16
- package/shaders/TechnicolorShader.js.map +1 -1
- package/shaders/ToneMapShader.cjs +55 -35
- package/shaders/ToneMapShader.cjs.map +1 -1
- package/shaders/ToneMapShader.js +55 -35
- package/shaders/ToneMapShader.js.map +1 -1
- package/shaders/ToonShader.cjs +275 -165
- package/shaders/ToonShader.cjs.map +1 -1
- package/shaders/ToonShader.js +275 -165
- package/shaders/ToonShader.js.map +1 -1
- package/shaders/TriangleBlurShader.cjs +50 -27
- package/shaders/TriangleBlurShader.cjs.map +1 -1
- package/shaders/TriangleBlurShader.js +50 -27
- package/shaders/TriangleBlurShader.js.map +1 -1
- package/shaders/UnpackDepthRGBAShader.cjs +32 -17
- package/shaders/UnpackDepthRGBAShader.cjs.map +1 -1
- package/shaders/UnpackDepthRGBAShader.js +32 -17
- package/shaders/UnpackDepthRGBAShader.js.map +1 -1
- package/shaders/VerticalTiltShiftShader.cjs +43 -27
- package/shaders/VerticalTiltShiftShader.cjs.map +1 -1
- package/shaders/VerticalTiltShiftShader.js +43 -27
- package/shaders/VerticalTiltShiftShader.js.map +1 -1
- package/shaders/VignetteShader.cjs +43 -27
- package/shaders/VignetteShader.cjs.map +1 -1
- package/shaders/VignetteShader.js +43 -27
- package/shaders/VignetteShader.js.map +1 -1
- package/shaders/VolumeShader.cjs +264 -213
- package/shaders/VolumeShader.cjs.map +1 -1
- package/shaders/VolumeShader.js +264 -213
- package/shaders/VolumeShader.js.map +1 -1
- package/shaders/WaterRefractionShader.cjs +63 -35
- package/shaders/WaterRefractionShader.cjs.map +1 -1
- package/shaders/WaterRefractionShader.js +63 -35
- package/shaders/WaterRefractionShader.js.map +1 -1
- package/utils/GeometryCompressionUtils.cjs +2 -1
- package/utils/GeometryCompressionUtils.cjs.map +1 -1
- package/utils/GeometryCompressionUtils.js +3 -2
- package/utils/GeometryCompressionUtils.js.map +1 -1
- package/utils/RoughnessMipmapper.cjs +3 -3
- package/utils/RoughnessMipmapper.cjs.map +1 -1
- package/utils/RoughnessMipmapper.js +4 -4
- package/utils/RoughnessMipmapper.js.map +1 -1
- package/webxr/ARButton.cjs +3 -3
- package/webxr/ARButton.cjs.map +1 -1
- package/webxr/ARButton.d.ts +3 -3
- package/webxr/ARButton.js +3 -3
- package/webxr/ARButton.js.map +1 -1
- package/webxr/OculusHandPointerModel.cjs +2 -2
- package/webxr/OculusHandPointerModel.cjs.map +1 -1
- package/webxr/OculusHandPointerModel.js +2 -2
- package/webxr/OculusHandPointerModel.js.map +1 -1
- package/webxr/VRButton.cjs +98 -95
- package/webxr/VRButton.cjs.map +1 -1
- package/webxr/VRButton.d.ts +9 -6
- package/webxr/VRButton.js +98 -95
- package/webxr/VRButton.js.map +1 -1
- package/webxr/XRHandPrimitiveModel.cjs +2 -2
- package/webxr/XRHandPrimitiveModel.cjs.map +1 -1
- package/webxr/XRHandPrimitiveModel.js +3 -3
- package/webxr/XRHandPrimitiveModel.js.map +1 -1
package/libs/chevrotain.cjs.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"chevrotain.cjs","sources":["../../src/libs/chevrotain.js"],"sourcesContent":["const { CstParser, Lexer, createToken } = (() => {\n /** Detect free variable `global` from Node.js. */\n var freeGlobal = typeof global == 'object' && global && global.Object === Object && global\n\n const freeGlobal$1 = freeGlobal\n\n /** Detect free variable `self`. */\n var freeSelf = typeof self == 'object' && self && self.Object === Object && self\n\n /** Used as a reference to the global object. */\n var root = freeGlobal$1 || freeSelf || Function('return this')()\n\n const root$1 = root\n\n /** Built-in value references. */\n var Symbol$1 = root$1.Symbol\n\n const Symbol$2 = Symbol$1\n\n /** Used for built-in method references. */\n var objectProto$j = Object.prototype\n\n /** Used to check objects for own properties. */\n var hasOwnProperty$g = objectProto$j.hasOwnProperty\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var nativeObjectToString$1 = objectProto$j.toString\n\n /** Built-in value references. */\n var symToStringTag$1 = Symbol$2 ? Symbol$2.toStringTag : undefined\n\n /**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n function getRawTag(value) {\n var isOwn = hasOwnProperty$g.call(value, symToStringTag$1),\n tag = value[symToStringTag$1]\n\n try {\n value[symToStringTag$1] = undefined\n var unmasked = true\n } catch (e) {}\n\n var result = nativeObjectToString$1.call(value)\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag$1] = tag\n } else {\n delete value[symToStringTag$1]\n }\n }\n return result\n }\n\n /** Used for built-in method references. */\n var objectProto$i = Object.prototype\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var nativeObjectToString = objectProto$i.toString\n\n /**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n function objectToString(value) {\n return nativeObjectToString.call(value)\n }\n\n /** `Object#toString` result references. */\n var nullTag = '[object Null]',\n undefinedTag = '[object Undefined]'\n\n /** Built-in value references. */\n var symToStringTag = Symbol$2 ? Symbol$2.toStringTag : undefined\n\n /**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n function baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag\n }\n return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value)\n }\n\n /**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n function isObjectLike(value) {\n return value != null && typeof value == 'object'\n }\n\n /** `Object#toString` result references. */\n var symbolTag$3 = '[object Symbol]'\n\n /**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n function isSymbol(value) {\n return typeof value == 'symbol' || (isObjectLike(value) && baseGetTag(value) == symbolTag$3)\n }\n\n /**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length)\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array)\n }\n return result\n }\n\n /**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n var isArray = Array.isArray\n\n const isArray$1 = isArray\n\n /** Used as references for various `Number` constants. */\n var INFINITY$3 = 1 / 0\n\n /** Used to convert symbols to primitives and strings. */\n var symbolProto$2 = Symbol$2 ? Symbol$2.prototype : undefined,\n symbolToString = symbolProto$2 ? symbolProto$2.toString : undefined\n\n /**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\n function baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value\n }\n if (isArray$1(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + ''\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : ''\n }\n var result = value + ''\n return result == '0' && 1 / value == -INFINITY$3 ? '-0' : result\n }\n\n /** Used to match a single whitespace character. */\n var reWhitespace = /\\s/\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\n function trimmedEndIndex(string) {\n var index = string.length\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index\n }\n\n /** Used to match leading whitespace. */\n var reTrimStart = /^\\s+/\n\n /**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\n function baseTrim(string) {\n return string ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') : string\n }\n\n /**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n function isObject(value) {\n var type = typeof value\n return value != null && (type == 'object' || type == 'function')\n }\n\n /** Used as references for various `Number` constants. */\n var NAN = 0 / 0\n\n /** Used to detect bad signed hexadecimal string values. */\n var reIsBadHex = /^[-+]0x[0-9a-f]+$/i\n\n /** Used to detect binary string values. */\n var reIsBinary = /^0b[01]+$/i\n\n /** Used to detect octal string values. */\n var reIsOctal = /^0o[0-7]+$/i\n\n /** Built-in method references without a dependency on `root`. */\n var freeParseInt = parseInt\n\n /**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n function toNumber(value) {\n if (typeof value == 'number') {\n return value\n }\n if (isSymbol(value)) {\n return NAN\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value\n value = isObject(other) ? other + '' : other\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value\n }\n value = baseTrim(value)\n var isBinary = reIsBinary.test(value)\n return isBinary || reIsOctal.test(value)\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : reIsBadHex.test(value)\n ? NAN\n : +value\n }\n\n /** Used as references for various `Number` constants. */\n var INFINITY$2 = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e308\n\n /**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\n function toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0\n }\n value = toNumber(value)\n if (value === INFINITY$2 || value === -INFINITY$2) {\n var sign = value < 0 ? -1 : 1\n return sign * MAX_INTEGER\n }\n return value === value ? value : 0\n }\n\n /**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\n function toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1\n\n return result === result ? (remainder ? result - remainder : result) : 0\n }\n\n /**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\n function identity(value) {\n return value\n }\n\n /** `Object#toString` result references. */\n var asyncTag = '[object AsyncFunction]',\n funcTag$2 = '[object Function]',\n genTag$1 = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]'\n\n /**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n function isFunction(value) {\n if (!isObject(value)) {\n return false\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value)\n return tag == funcTag$2 || tag == genTag$1 || tag == asyncTag || tag == proxyTag\n }\n\n /** Used to detect overreaching core-js shims. */\n var coreJsData = root$1['__core-js_shared__']\n\n const coreJsData$1 = coreJsData\n\n /** Used to detect methods masquerading as native. */\n var maskSrcKey = (function () {\n var uid = /[^.]+$/.exec((coreJsData$1 && coreJsData$1.keys && coreJsData$1.keys.IE_PROTO) || '')\n return uid ? 'Symbol(src)_1.' + uid : ''\n })()\n\n /**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n function isMasked(func) {\n return !!maskSrcKey && maskSrcKey in func\n }\n\n /** Used for built-in method references. */\n var funcProto$1 = Function.prototype\n\n /** Used to resolve the decompiled source of functions. */\n var funcToString$1 = funcProto$1.toString\n\n /**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\n function toSource(func) {\n if (func != null) {\n try {\n return funcToString$1.call(func)\n } catch (e) {}\n try {\n return func + ''\n } catch (e) {}\n }\n return ''\n }\n\n /**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g\n\n /** Used to detect host constructors (Safari). */\n var reIsHostCtor = /^\\[object .+?Constructor\\]$/\n\n /** Used for built-in method references. */\n var funcProto = Function.prototype,\n objectProto$h = Object.prototype\n\n /** Used to resolve the decompiled source of functions. */\n var funcToString = funcProto.toString\n\n /** Used to check objects for own properties. */\n var hasOwnProperty$f = objectProto$h.hasOwnProperty\n\n /** Used to detect if a method is native. */\n var reIsNative = RegExp(\n '^' +\n funcToString\n .call(hasOwnProperty$f)\n .replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') +\n '$',\n )\n\n /**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n function baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor\n return pattern.test(toSource(value))\n }\n\n /**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function getValue(object, key) {\n return object == null ? undefined : object[key]\n }\n\n /**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n function getNative(object, key) {\n var value = getValue(object, key)\n return baseIsNative(value) ? value : undefined\n }\n\n /* Built-in method references that are verified to be native. */\n var WeakMap = getNative(root$1, 'WeakMap')\n\n const WeakMap$1 = WeakMap\n\n /** Built-in value references. */\n var objectCreate = Object.create\n\n /**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\n var baseCreate = (function () {\n function object() {}\n return function (proto) {\n if (!isObject(proto)) {\n return {}\n }\n if (objectCreate) {\n return objectCreate(proto)\n }\n object.prototype = proto\n var result = new object()\n object.prototype = undefined\n return result\n }\n })()\n\n const baseCreate$1 = baseCreate\n\n /**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\n function apply(func, thisArg, args) {\n switch (args.length) {\n case 0:\n return func.call(thisArg)\n case 1:\n return func.call(thisArg, args[0])\n case 2:\n return func.call(thisArg, args[0], args[1])\n case 3:\n return func.call(thisArg, args[0], args[1], args[2])\n }\n return func.apply(thisArg, args)\n }\n\n /**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\n function noop() {\n // No operation performed.\n }\n\n /**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\n function copyArray(source, array) {\n var index = -1,\n length = source.length\n\n array || (array = Array(length))\n while (++index < length) {\n array[index] = source[index]\n }\n return array\n }\n\n /** Used to detect hot functions by number of calls within a span of milliseconds. */\n var HOT_COUNT = 800,\n HOT_SPAN = 16\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeNow = Date.now\n\n /**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\n function shortOut(func) {\n var count = 0,\n lastCalled = 0\n\n return function () {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled)\n\n lastCalled = stamp\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0]\n }\n } else {\n count = 0\n }\n return func.apply(undefined, arguments)\n }\n }\n\n /**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\n function constant(value) {\n return function () {\n return value\n }\n }\n\n var defineProperty = (function () {\n try {\n var func = getNative(Object, 'defineProperty')\n func({}, '', {})\n return func\n } catch (e) {}\n })()\n\n const defineProperty$1 = defineProperty\n\n /**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var baseSetToString = !defineProperty$1\n ? identity\n : function (func, string) {\n return defineProperty$1(func, 'toString', {\n configurable: true,\n enumerable: false,\n value: constant(string),\n writable: true,\n })\n }\n\n const baseSetToString$1 = baseSetToString\n\n /**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var setToString = shortOut(baseSetToString$1)\n\n const setToString$1 = setToString\n\n /**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break\n }\n }\n return array\n }\n\n /**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1)\n\n while (fromRight ? index-- : ++index < length) {\n if (predicate(array[index], index, array)) {\n return index\n }\n }\n return -1\n }\n\n /**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\n function baseIsNaN(value) {\n return value !== value\n }\n\n /**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length\n\n while (++index < length) {\n if (array[index] === value) {\n return index\n }\n }\n return -1\n }\n\n /**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOf(array, value, fromIndex) {\n return value === value ? strictIndexOf(array, value, fromIndex) : baseFindIndex(array, baseIsNaN, fromIndex)\n }\n\n /**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length\n return !!length && baseIndexOf(array, value, 0) > -1\n }\n\n /** Used as references for various `Number` constants. */\n var MAX_SAFE_INTEGER$1 = 9007199254740991\n\n /** Used to detect unsigned integer values. */\n var reIsUint = /^(?:0|[1-9]\\d*)$/\n\n /**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n function isIndex(value, length) {\n var type = typeof value\n length = length == null ? MAX_SAFE_INTEGER$1 : length\n\n return (\n !!length &&\n (type == 'number' || (type != 'symbol' && reIsUint.test(value))) &&\n value > -1 &&\n value % 1 == 0 &&\n value < length\n )\n }\n\n /**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty$1) {\n defineProperty$1(object, key, {\n configurable: true,\n enumerable: true,\n value: value,\n writable: true,\n })\n } else {\n object[key] = value\n }\n }\n\n /**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n function eq(value, other) {\n return value === other || (value !== value && other !== other)\n }\n\n /** Used for built-in method references. */\n var objectProto$g = Object.prototype\n\n /** Used to check objects for own properties. */\n var hasOwnProperty$e = objectProto$g.hasOwnProperty\n\n /**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignValue(object, key, value) {\n var objValue = object[key]\n if (!(hasOwnProperty$e.call(object, key) && eq(objValue, value)) || (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value)\n }\n }\n\n /**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\n function copyObject(source, props, object, customizer) {\n var isNew = !object\n object || (object = {})\n\n var index = -1,\n length = props.length\n\n while (++index < length) {\n var key = props[index]\n\n var newValue = customizer ? customizer(object[key], source[key], key, object, source) : undefined\n\n if (newValue === undefined) {\n newValue = source[key]\n }\n if (isNew) {\n baseAssignValue(object, key, newValue)\n } else {\n assignValue(object, key, newValue)\n }\n }\n return object\n }\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeMax$3 = Math.max\n\n /**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\n function overRest(func, start, transform) {\n start = nativeMax$3(start === undefined ? func.length - 1 : start, 0)\n return function () {\n var args = arguments,\n index = -1,\n length = nativeMax$3(args.length - start, 0),\n array = Array(length)\n\n while (++index < length) {\n array[index] = args[start + index]\n }\n index = -1\n var otherArgs = Array(start + 1)\n while (++index < start) {\n otherArgs[index] = args[index]\n }\n otherArgs[start] = transform(array)\n return apply(func, this, otherArgs)\n }\n }\n\n /**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\n function baseRest(func, start) {\n return setToString$1(overRest(func, start, identity), func + '')\n }\n\n /** Used as references for various `Number` constants. */\n var MAX_SAFE_INTEGER = 9007199254740991\n\n /**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n function isLength(value) {\n return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER\n }\n\n /**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n function isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value)\n }\n\n /**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\n function isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false\n }\n var type = typeof index\n if (type == 'number' ? isArrayLike(object) && isIndex(index, object.length) : type == 'string' && index in object) {\n return eq(object[index], value)\n }\n return false\n }\n\n /**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\n function createAssigner(assigner) {\n return baseRest(function (object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined\n\n customizer = assigner.length > 3 && typeof customizer == 'function' ? (length--, customizer) : undefined\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer\n length = 1\n }\n object = Object(object)\n while (++index < length) {\n var source = sources[index]\n if (source) {\n assigner(object, source, index, customizer)\n }\n }\n return object\n })\n }\n\n /** Used for built-in method references. */\n var objectProto$f = Object.prototype\n\n /**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n function isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto$f\n\n return value === proto\n }\n\n /**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\n function baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n)\n\n while (++index < n) {\n result[index] = iteratee(index)\n }\n return result\n }\n\n /** `Object#toString` result references. */\n var argsTag$3 = '[object Arguments]'\n\n /**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\n function baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag$3\n }\n\n /** Used for built-in method references. */\n var objectProto$e = Object.prototype\n\n /** Used to check objects for own properties. */\n var hasOwnProperty$d = objectProto$e.hasOwnProperty\n\n /** Built-in value references. */\n var propertyIsEnumerable$1 = objectProto$e.propertyIsEnumerable\n\n /**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n var isArguments = baseIsArguments(\n (function () {\n return arguments\n })(),\n )\n ? baseIsArguments\n : function (value) {\n return (\n isObjectLike(value) && hasOwnProperty$d.call(value, 'callee') && !propertyIsEnumerable$1.call(value, 'callee')\n )\n }\n\n const isArguments$1 = isArguments\n\n /**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\n function stubFalse() {\n return false\n }\n\n /** Detect free variable `exports`. */\n var freeExports$2 = typeof exports == 'object' && exports && !exports.nodeType && exports\n\n /** Detect free variable `module`. */\n var freeModule$2 = freeExports$2 && typeof module == 'object' && module && !module.nodeType && module\n\n /** Detect the popular CommonJS extension `module.exports`. */\n var moduleExports$2 = freeModule$2 && freeModule$2.exports === freeExports$2\n\n /** Built-in value references. */\n var Buffer$1 = moduleExports$2 ? root$1.Buffer : undefined\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeIsBuffer = Buffer$1 ? Buffer$1.isBuffer : undefined\n\n /**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\n var isBuffer = nativeIsBuffer || stubFalse\n\n const isBuffer$1 = isBuffer\n\n /** `Object#toString` result references. */\n var argsTag$2 = '[object Arguments]',\n arrayTag$2 = '[object Array]',\n boolTag$3 = '[object Boolean]',\n dateTag$3 = '[object Date]',\n errorTag$2 = '[object Error]',\n funcTag$1 = '[object Function]',\n mapTag$6 = '[object Map]',\n numberTag$3 = '[object Number]',\n objectTag$3 = '[object Object]',\n regexpTag$4 = '[object RegExp]',\n setTag$6 = '[object Set]',\n stringTag$4 = '[object String]',\n weakMapTag$2 = '[object WeakMap]'\n\n var arrayBufferTag$3 = '[object ArrayBuffer]',\n dataViewTag$4 = '[object DataView]',\n float32Tag$2 = '[object Float32Array]',\n float64Tag$2 = '[object Float64Array]',\n int8Tag$2 = '[object Int8Array]',\n int16Tag$2 = '[object Int16Array]',\n int32Tag$2 = '[object Int32Array]',\n uint8Tag$2 = '[object Uint8Array]',\n uint8ClampedTag$2 = '[object Uint8ClampedArray]',\n uint16Tag$2 = '[object Uint16Array]',\n uint32Tag$2 = '[object Uint32Array]'\n\n /** Used to identify `toStringTag` values of typed arrays. */\n var typedArrayTags = {}\n typedArrayTags[float32Tag$2] = typedArrayTags[float64Tag$2] = typedArrayTags[int8Tag$2] = typedArrayTags[\n int16Tag$2\n ] = typedArrayTags[int32Tag$2] = typedArrayTags[uint8Tag$2] = typedArrayTags[uint8ClampedTag$2] = typedArrayTags[\n uint16Tag$2\n ] = typedArrayTags[uint32Tag$2] = true\n typedArrayTags[argsTag$2] = typedArrayTags[arrayTag$2] = typedArrayTags[arrayBufferTag$3] = typedArrayTags[\n boolTag$3\n ] = typedArrayTags[dataViewTag$4] = typedArrayTags[dateTag$3] = typedArrayTags[errorTag$2] = typedArrayTags[\n funcTag$1\n ] = typedArrayTags[mapTag$6] = typedArrayTags[numberTag$3] = typedArrayTags[objectTag$3] = typedArrayTags[\n regexpTag$4\n ] = typedArrayTags[setTag$6] = typedArrayTags[stringTag$4] = typedArrayTags[weakMapTag$2] = false\n\n /**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\n function baseIsTypedArray(value) {\n return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)]\n }\n\n /**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\n function baseUnary(func) {\n return function (value) {\n return func(value)\n }\n }\n\n /** Detect free variable `exports`. */\n var freeExports$1 = typeof exports == 'object' && exports && !exports.nodeType && exports\n\n /** Detect free variable `module`. */\n var freeModule$1 = freeExports$1 && typeof module == 'object' && module && !module.nodeType && module\n\n /** Detect the popular CommonJS extension `module.exports`. */\n var moduleExports$1 = freeModule$1 && freeModule$1.exports === freeExports$1\n\n /** Detect free variable `process` from Node.js. */\n var freeProcess = moduleExports$1 && freeGlobal$1.process\n\n /** Used to access faster Node.js helpers. */\n var nodeUtil = (function () {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule$1 && freeModule$1.require && freeModule$1.require('util').types\n\n if (types) {\n return types\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util')\n } catch (e) {}\n })()\n\n const nodeUtil$1 = nodeUtil\n\n /* Node.js helper references. */\n var nodeIsTypedArray = nodeUtil$1 && nodeUtil$1.isTypedArray\n\n /**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\n var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray\n\n const isTypedArray$1 = isTypedArray\n\n /** Used for built-in method references. */\n var objectProto$d = Object.prototype\n\n /** Used to check objects for own properties. */\n var hasOwnProperty$c = objectProto$d.hasOwnProperty\n\n /**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n function arrayLikeKeys(value, inherited) {\n var isArr = isArray$1(value),\n isArg = !isArr && isArguments$1(value),\n isBuff = !isArr && !isArg && isBuffer$1(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray$1(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length\n\n for (var key in value) {\n if (\n (inherited || hasOwnProperty$c.call(value, key)) &&\n !(\n skipIndexes &&\n // Safari 9 has enumerable `arguments.length` in strict mode.\n (key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length))\n )\n ) {\n result.push(key)\n }\n }\n return result\n }\n\n /**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n function overArg(func, transform) {\n return function (arg) {\n return func(transform(arg))\n }\n }\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeKeys = overArg(Object.keys, Object)\n\n const nativeKeys$1 = nativeKeys\n\n /** Used for built-in method references. */\n var objectProto$c = Object.prototype\n\n /** Used to check objects for own properties. */\n var hasOwnProperty$b = objectProto$c.hasOwnProperty\n\n /**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys$1(object)\n }\n var result = []\n for (var key in Object(object)) {\n if (hasOwnProperty$b.call(object, key) && key != 'constructor') {\n result.push(key)\n }\n }\n return result\n }\n\n /**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n function keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object)\n }\n\n /** Used for built-in method references. */\n var objectProto$b = Object.prototype\n\n /** Used to check objects for own properties. */\n var hasOwnProperty$a = objectProto$b.hasOwnProperty\n\n /**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\n var assign = createAssigner(function (object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object)\n return\n }\n for (var key in source) {\n if (hasOwnProperty$a.call(source, key)) {\n assignValue(object, key, source[key])\n }\n }\n })\n\n const assign$1 = assign\n\n /**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function nativeKeysIn(object) {\n var result = []\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key)\n }\n }\n return result\n }\n\n /** Used for built-in method references. */\n var objectProto$a = Object.prototype\n\n /** Used to check objects for own properties. */\n var hasOwnProperty$9 = objectProto$a.hasOwnProperty\n\n /**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object)\n }\n var isProto = isPrototype(object),\n result = []\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty$9.call(object, key)))) {\n result.push(key)\n }\n }\n return result\n }\n\n /**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\n function keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object)\n }\n\n /** Used to match property names within property paths. */\n var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/\n\n /**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\n function isKey(value, object) {\n if (isArray$1(value)) {\n return false\n }\n var type = typeof value\n if (type == 'number' || type == 'symbol' || type == 'boolean' || value == null || isSymbol(value)) {\n return true\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || (object != null && value in Object(object))\n }\n\n /* Built-in method references that are verified to be native. */\n var nativeCreate = getNative(Object, 'create')\n\n const nativeCreate$1 = nativeCreate\n\n /**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n function hashClear() {\n this.__data__ = nativeCreate$1 ? nativeCreate$1(null) : {}\n this.size = 0\n }\n\n /**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key]\n this.size -= result ? 1 : 0\n return result\n }\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED$2 = '__lodash_hash_undefined__'\n\n /** Used for built-in method references. */\n var objectProto$9 = Object.prototype\n\n /** Used to check objects for own properties. */\n var hasOwnProperty$8 = objectProto$9.hasOwnProperty\n\n /**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function hashGet(key) {\n var data = this.__data__\n if (nativeCreate$1) {\n var result = data[key]\n return result === HASH_UNDEFINED$2 ? undefined : result\n }\n return hasOwnProperty$8.call(data, key) ? data[key] : undefined\n }\n\n /** Used for built-in method references. */\n var objectProto$8 = Object.prototype\n\n /** Used to check objects for own properties. */\n var hasOwnProperty$7 = objectProto$8.hasOwnProperty\n\n /**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function hashHas(key) {\n var data = this.__data__\n return nativeCreate$1 ? data[key] !== undefined : hasOwnProperty$7.call(data, key)\n }\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED$1 = '__lodash_hash_undefined__'\n\n /**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n function hashSet(key, value) {\n var data = this.__data__\n this.size += this.has(key) ? 0 : 1\n data[key] = nativeCreate$1 && value === undefined ? HASH_UNDEFINED$1 : value\n return this\n }\n\n /**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length\n\n this.clear()\n while (++index < length) {\n var entry = entries[index]\n this.set(entry[0], entry[1])\n }\n }\n\n // Add methods to `Hash`.\n Hash.prototype.clear = hashClear\n Hash.prototype['delete'] = hashDelete\n Hash.prototype.get = hashGet\n Hash.prototype.has = hashHas\n Hash.prototype.set = hashSet\n\n /**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n function listCacheClear() {\n this.__data__ = []\n this.size = 0\n }\n\n /**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function assocIndexOf(array, key) {\n var length = array.length\n while (length--) {\n if (eq(array[length][0], key)) {\n return length\n }\n }\n return -1\n }\n\n /** Used for built-in method references. */\n var arrayProto = Array.prototype\n\n /** Built-in value references. */\n var splice = arrayProto.splice\n\n /**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key)\n\n if (index < 0) {\n return false\n }\n var lastIndex = data.length - 1\n if (index == lastIndex) {\n data.pop()\n } else {\n splice.call(data, index, 1)\n }\n --this.size\n return true\n }\n\n /**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key)\n\n return index < 0 ? undefined : data[index][1]\n }\n\n /**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1\n }\n\n /**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n function listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key)\n\n if (index < 0) {\n ++this.size\n data.push([key, value])\n } else {\n data[index][1] = value\n }\n return this\n }\n\n /**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length\n\n this.clear()\n while (++index < length) {\n var entry = entries[index]\n this.set(entry[0], entry[1])\n }\n }\n\n // Add methods to `ListCache`.\n ListCache.prototype.clear = listCacheClear\n ListCache.prototype['delete'] = listCacheDelete\n ListCache.prototype.get = listCacheGet\n ListCache.prototype.has = listCacheHas\n ListCache.prototype.set = listCacheSet\n\n /* Built-in method references that are verified to be native. */\n var Map$1 = getNative(root$1, 'Map')\n\n const Map$2 = Map$1\n\n /**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n function mapCacheClear() {\n this.size = 0\n this.__data__ = {\n hash: new Hash(),\n map: new (Map$2 || ListCache)(),\n string: new Hash(),\n }\n }\n\n /**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n function isKeyable(value) {\n var type = typeof value\n return type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean'\n ? value !== '__proto__'\n : value === null\n }\n\n /**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n function getMapData(map, key) {\n var data = map.__data__\n return isKeyable(key) ? data[typeof key == 'string' ? 'string' : 'hash'] : data.map\n }\n\n /**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key)\n this.size -= result ? 1 : 0\n return result\n }\n\n /**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function mapCacheGet(key) {\n return getMapData(this, key).get(key)\n }\n\n /**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function mapCacheHas(key) {\n return getMapData(this, key).has(key)\n }\n\n /**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n function mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size\n\n data.set(key, value)\n this.size += data.size == size ? 0 : 1\n return this\n }\n\n /**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length\n\n this.clear()\n while (++index < length) {\n var entry = entries[index]\n this.set(entry[0], entry[1])\n }\n }\n\n // Add methods to `MapCache`.\n MapCache.prototype.clear = mapCacheClear\n MapCache.prototype['delete'] = mapCacheDelete\n MapCache.prototype.get = mapCacheGet\n MapCache.prototype.has = mapCacheHas\n MapCache.prototype.set = mapCacheSet\n\n /** Error message constants. */\n var FUNC_ERROR_TEXT$1 = 'Expected a function'\n\n /**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\n function memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT$1)\n }\n var memoized = function () {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache\n\n if (cache.has(key)) {\n return cache.get(key)\n }\n var result = func.apply(this, args)\n memoized.cache = cache.set(key, result) || cache\n return result\n }\n memoized.cache = new (memoize.Cache || MapCache)()\n return memoized\n }\n\n // Expose `MapCache`.\n memoize.Cache = MapCache\n\n /** Used as the maximum memoize cache size. */\n var MAX_MEMOIZE_SIZE = 500\n\n /**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\n function memoizeCapped(func) {\n var result = memoize(func, function (key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear()\n }\n return key\n })\n\n var cache = result.cache\n return result\n }\n\n /** Used to match property names within property paths. */\n var rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g\n\n /** Used to match backslashes in property paths. */\n var reEscapeChar = /\\\\(\\\\)?/g\n\n /**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\n var stringToPath = memoizeCapped(function (string) {\n var result = []\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('')\n }\n string.replace(rePropName, function (match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : number || match)\n })\n return result\n })\n\n const stringToPath$1 = stringToPath\n\n /**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\n function toString(value) {\n return value == null ? '' : baseToString(value)\n }\n\n /**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\n function castPath(value, object) {\n if (isArray$1(value)) {\n return value\n }\n return isKey(value, object) ? [value] : stringToPath$1(toString(value))\n }\n\n /** Used as references for various `Number` constants. */\n var INFINITY$1 = 1 / 0\n\n /**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\n function toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value\n }\n var result = value + ''\n return result == '0' && 1 / value == -INFINITY$1 ? '-0' : result\n }\n\n /**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\n function baseGet(object, path) {\n path = castPath(path, object)\n\n var index = 0,\n length = path.length\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])]\n }\n return index && index == length ? object : undefined\n }\n\n /**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\n function get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path)\n return result === undefined ? defaultValue : result\n }\n\n /**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\n function arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length\n\n while (++index < length) {\n array[offset + index] = values[index]\n }\n return array\n }\n\n /** Built-in value references. */\n var spreadableSymbol = Symbol$2 ? Symbol$2.isConcatSpreadable : undefined\n\n /**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\n function isFlattenable(value) {\n return isArray$1(value) || isArguments$1(value) || !!(spreadableSymbol && value && value[spreadableSymbol])\n }\n\n /**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\n function baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length\n\n predicate || (predicate = isFlattenable)\n result || (result = [])\n\n while (++index < length) {\n var value = array[index]\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result)\n } else {\n arrayPush(result, value)\n }\n } else if (!isStrict) {\n result[result.length] = value\n }\n }\n return result\n }\n\n /**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\n function flatten(array) {\n var length = array == null ? 0 : array.length\n return length ? baseFlatten(array, 1) : []\n }\n\n /** Built-in value references. */\n var getPrototype = overArg(Object.getPrototypeOf, Object)\n\n const getPrototype$1 = getPrototype\n\n /**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseSlice(array, start, end) {\n var index = -1,\n length = array.length\n\n if (start < 0) {\n start = -start > length ? 0 : length + start\n }\n end = end > length ? length : end\n if (end < 0) {\n end += length\n }\n length = start > end ? 0 : (end - start) >>> 0\n start >>>= 0\n\n var result = Array(length)\n while (++index < length) {\n result[index] = array[index + start]\n }\n return result\n }\n\n /**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length\n\n if (initAccum && length) {\n accumulator = array[++index]\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array)\n }\n return accumulator\n }\n\n /**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n function stackClear() {\n this.__data__ = new ListCache()\n this.size = 0\n }\n\n /**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key)\n\n this.size = data.size\n return result\n }\n\n /**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function stackGet(key) {\n return this.__data__.get(key)\n }\n\n /**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function stackHas(key) {\n return this.__data__.has(key)\n }\n\n /** Used as the size to enable large array optimizations. */\n var LARGE_ARRAY_SIZE$2 = 200\n\n /**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n function stackSet(key, value) {\n var data = this.__data__\n if (data instanceof ListCache) {\n var pairs = data.__data__\n if (!Map$2 || pairs.length < LARGE_ARRAY_SIZE$2 - 1) {\n pairs.push([key, value])\n this.size = ++data.size\n return this\n }\n data = this.__data__ = new MapCache(pairs)\n }\n data.set(key, value)\n this.size = data.size\n return this\n }\n\n /**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Stack(entries) {\n var data = (this.__data__ = new ListCache(entries))\n this.size = data.size\n }\n\n // Add methods to `Stack`.\n Stack.prototype.clear = stackClear\n Stack.prototype['delete'] = stackDelete\n Stack.prototype.get = stackGet\n Stack.prototype.has = stackHas\n Stack.prototype.set = stackSet\n\n /**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssign(object, source) {\n return object && copyObject(source, keys(source), object)\n }\n\n /**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object)\n }\n\n /** Detect free variable `exports`. */\n var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports\n\n /** Detect free variable `module`. */\n var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module\n\n /** Detect the popular CommonJS extension `module.exports`. */\n var moduleExports = freeModule && freeModule.exports === freeExports\n\n /** Built-in value references. */\n var Buffer = moduleExports ? root$1.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined\n\n /**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\n function cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice()\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length)\n\n buffer.copy(result)\n return result\n }\n\n /**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = []\n\n while (++index < length) {\n var value = array[index]\n if (predicate(value, index, array)) {\n result[resIndex++] = value\n }\n }\n return result\n }\n\n /**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\n function stubArray() {\n return []\n }\n\n /** Used for built-in method references. */\n var objectProto$7 = Object.prototype\n\n /** Built-in value references. */\n var propertyIsEnumerable = objectProto$7.propertyIsEnumerable\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeGetSymbols$1 = Object.getOwnPropertySymbols\n\n /**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbols = !nativeGetSymbols$1\n ? stubArray\n : function (object) {\n if (object == null) {\n return []\n }\n object = Object(object)\n return arrayFilter(nativeGetSymbols$1(object), function (symbol) {\n return propertyIsEnumerable.call(object, symbol)\n })\n }\n\n const getSymbols$1 = getSymbols\n\n /**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbols(source, object) {\n return copyObject(source, getSymbols$1(source), object)\n }\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeGetSymbols = Object.getOwnPropertySymbols\n\n /**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbolsIn = !nativeGetSymbols\n ? stubArray\n : function (object) {\n var result = []\n while (object) {\n arrayPush(result, getSymbols$1(object))\n object = getPrototype$1(object)\n }\n return result\n }\n\n const getSymbolsIn$1 = getSymbolsIn\n\n /**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn$1(source), object)\n }\n\n /**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object)\n return isArray$1(object) ? result : arrayPush(result, symbolsFunc(object))\n }\n\n /**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols$1)\n }\n\n /**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn$1)\n }\n\n /* Built-in method references that are verified to be native. */\n var DataView = getNative(root$1, 'DataView')\n\n const DataView$1 = DataView\n\n /* Built-in method references that are verified to be native. */\n var Promise$1 = getNative(root$1, 'Promise')\n\n const Promise$2 = Promise$1\n\n /* Built-in method references that are verified to be native. */\n var Set = getNative(root$1, 'Set')\n\n const Set$1 = Set\n\n /** `Object#toString` result references. */\n var mapTag$5 = '[object Map]',\n objectTag$2 = '[object Object]',\n promiseTag = '[object Promise]',\n setTag$5 = '[object Set]',\n weakMapTag$1 = '[object WeakMap]'\n\n var dataViewTag$3 = '[object DataView]'\n\n /** Used to detect maps, sets, and weakmaps. */\n var dataViewCtorString = toSource(DataView$1),\n mapCtorString = toSource(Map$2),\n promiseCtorString = toSource(Promise$2),\n setCtorString = toSource(Set$1),\n weakMapCtorString = toSource(WeakMap$1)\n\n /**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n var getTag = baseGetTag\n\n // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n if (\n (DataView$1 && getTag(new DataView$1(new ArrayBuffer(1))) != dataViewTag$3) ||\n (Map$2 && getTag(new Map$2()) != mapTag$5) ||\n (Promise$2 && getTag(Promise$2.resolve()) != promiseTag) ||\n (Set$1 && getTag(new Set$1()) != setTag$5) ||\n (WeakMap$1 && getTag(new WeakMap$1()) != weakMapTag$1)\n ) {\n getTag = function (value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag$2 ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : ''\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString:\n return dataViewTag$3\n case mapCtorString:\n return mapTag$5\n case promiseCtorString:\n return promiseTag\n case setCtorString:\n return setTag$5\n case weakMapCtorString:\n return weakMapTag$1\n }\n }\n return result\n }\n }\n\n const getTag$1 = getTag\n\n /** Used for built-in method references. */\n var objectProto$6 = Object.prototype\n\n /** Used to check objects for own properties. */\n var hasOwnProperty$6 = objectProto$6.hasOwnProperty\n\n /**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\n function initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length)\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty$6.call(array, 'index')) {\n result.index = array.index\n result.input = array.input\n }\n return result\n }\n\n /** Built-in value references. */\n var Uint8Array = root$1.Uint8Array\n\n const Uint8Array$1 = Uint8Array\n\n /**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\n function cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength)\n new Uint8Array$1(result).set(new Uint8Array$1(arrayBuffer))\n return result\n }\n\n /**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\n function cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength)\n }\n\n /** Used to match `RegExp` flags from their coerced string values. */\n var reFlags = /\\w*$/\n\n /**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\n function cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp))\n result.lastIndex = regexp.lastIndex\n return result\n }\n\n /** Used to convert symbols to primitives and strings. */\n var symbolProto$1 = Symbol$2 ? Symbol$2.prototype : undefined,\n symbolValueOf$1 = symbolProto$1 ? symbolProto$1.valueOf : undefined\n\n /**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\n function cloneSymbol(symbol) {\n return symbolValueOf$1 ? Object(symbolValueOf$1.call(symbol)) : {}\n }\n\n /**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\n function cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length)\n }\n\n /** `Object#toString` result references. */\n var boolTag$2 = '[object Boolean]',\n dateTag$2 = '[object Date]',\n mapTag$4 = '[object Map]',\n numberTag$2 = '[object Number]',\n regexpTag$3 = '[object RegExp]',\n setTag$4 = '[object Set]',\n stringTag$3 = '[object String]',\n symbolTag$2 = '[object Symbol]'\n\n var arrayBufferTag$2 = '[object ArrayBuffer]',\n dataViewTag$2 = '[object DataView]',\n float32Tag$1 = '[object Float32Array]',\n float64Tag$1 = '[object Float64Array]',\n int8Tag$1 = '[object Int8Array]',\n int16Tag$1 = '[object Int16Array]',\n int32Tag$1 = '[object Int32Array]',\n uint8Tag$1 = '[object Uint8Array]',\n uint8ClampedTag$1 = '[object Uint8ClampedArray]',\n uint16Tag$1 = '[object Uint16Array]',\n uint32Tag$1 = '[object Uint32Array]'\n\n /**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor\n switch (tag) {\n case arrayBufferTag$2:\n return cloneArrayBuffer(object)\n\n case boolTag$2:\n case dateTag$2:\n return new Ctor(+object)\n\n case dataViewTag$2:\n return cloneDataView(object, isDeep)\n\n case float32Tag$1:\n case float64Tag$1:\n case int8Tag$1:\n case int16Tag$1:\n case int32Tag$1:\n case uint8Tag$1:\n case uint8ClampedTag$1:\n case uint16Tag$1:\n case uint32Tag$1:\n return cloneTypedArray(object, isDeep)\n\n case mapTag$4:\n return new Ctor()\n\n case numberTag$2:\n case stringTag$3:\n return new Ctor(object)\n\n case regexpTag$3:\n return cloneRegExp(object)\n\n case setTag$4:\n return new Ctor()\n\n case symbolTag$2:\n return cloneSymbol(object)\n }\n }\n\n /**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneObject(object) {\n return typeof object.constructor == 'function' && !isPrototype(object) ? baseCreate$1(getPrototype$1(object)) : {}\n }\n\n /** `Object#toString` result references. */\n var mapTag$3 = '[object Map]'\n\n /**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\n function baseIsMap(value) {\n return isObjectLike(value) && getTag$1(value) == mapTag$3\n }\n\n /* Node.js helper references. */\n var nodeIsMap = nodeUtil$1 && nodeUtil$1.isMap\n\n /**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\n var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap\n\n const isMap$1 = isMap\n\n /** `Object#toString` result references. */\n var setTag$3 = '[object Set]'\n\n /**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\n function baseIsSet(value) {\n return isObjectLike(value) && getTag$1(value) == setTag$3\n }\n\n /* Node.js helper references. */\n var nodeIsSet = nodeUtil$1 && nodeUtil$1.isSet\n\n /**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\n var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet\n\n const isSet$1 = isSet\n\n /** Used to compose bitmasks for cloning. */\n var CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG$1 = 4\n\n /** `Object#toString` result references. */\n var argsTag$1 = '[object Arguments]',\n arrayTag$1 = '[object Array]',\n boolTag$1 = '[object Boolean]',\n dateTag$1 = '[object Date]',\n errorTag$1 = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag$2 = '[object Map]',\n numberTag$1 = '[object Number]',\n objectTag$1 = '[object Object]',\n regexpTag$2 = '[object RegExp]',\n setTag$2 = '[object Set]',\n stringTag$2 = '[object String]',\n symbolTag$1 = '[object Symbol]',\n weakMapTag = '[object WeakMap]'\n\n var arrayBufferTag$1 = '[object ArrayBuffer]',\n dataViewTag$1 = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]'\n\n /** Used to identify `toStringTag` values supported by `_.clone`. */\n var cloneableTags = {}\n cloneableTags[argsTag$1] = cloneableTags[arrayTag$1] = cloneableTags[arrayBufferTag$1] = cloneableTags[\n dataViewTag$1\n ] = cloneableTags[boolTag$1] = cloneableTags[dateTag$1] = cloneableTags[float32Tag] = cloneableTags[\n float64Tag\n ] = cloneableTags[int8Tag] = cloneableTags[int16Tag] = cloneableTags[int32Tag] = cloneableTags[\n mapTag$2\n ] = cloneableTags[numberTag$1] = cloneableTags[objectTag$1] = cloneableTags[regexpTag$2] = cloneableTags[\n setTag$2\n ] = cloneableTags[stringTag$2] = cloneableTags[symbolTag$1] = cloneableTags[uint8Tag] = cloneableTags[\n uint8ClampedTag\n ] = cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true\n cloneableTags[errorTag$1] = cloneableTags[funcTag] = cloneableTags[weakMapTag] = false\n\n /**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\n function baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG$1\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value)\n }\n if (result !== undefined) {\n return result\n }\n if (!isObject(value)) {\n return value\n }\n var isArr = isArray$1(value)\n if (isArr) {\n result = initCloneArray(value)\n if (!isDeep) {\n return copyArray(value, result)\n }\n } else {\n var tag = getTag$1(value),\n isFunc = tag == funcTag || tag == genTag\n\n if (isBuffer$1(value)) {\n return cloneBuffer(value, isDeep)\n }\n if (tag == objectTag$1 || tag == argsTag$1 || (isFunc && !object)) {\n result = isFlat || isFunc ? {} : initCloneObject(value)\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value))\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {}\n }\n result = initCloneByTag(value, tag, isDeep)\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack())\n var stacked = stack.get(value)\n if (stacked) {\n return stacked\n }\n stack.set(value, result)\n\n if (isSet$1(value)) {\n value.forEach(function (subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack))\n })\n } else if (isMap$1(value)) {\n value.forEach(function (subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack))\n })\n }\n\n var keysFunc = isFull ? (isFlat ? getAllKeysIn : getAllKeys) : isFlat ? keysIn : keys\n\n var props = isArr ? undefined : keysFunc(value)\n arrayEach(props || value, function (subValue, key) {\n if (props) {\n key = subValue\n subValue = value[key]\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack))\n })\n return result\n }\n\n /** Used to compose bitmasks for cloning. */\n var CLONE_SYMBOLS_FLAG = 4\n\n /**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\n function clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG)\n }\n\n /**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\n function compact(array) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = []\n\n while (++index < length) {\n var value = array[index]\n if (value) {\n result[resIndex++] = value\n }\n }\n return result\n }\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED = '__lodash_hash_undefined__'\n\n /**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\n function setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED)\n return this\n }\n\n /**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\n function setCacheHas(value) {\n return this.__data__.has(value)\n }\n\n /**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\n function SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length\n\n this.__data__ = new MapCache()\n while (++index < length) {\n this.add(values[index])\n }\n }\n\n // Add methods to `SetCache`.\n SetCache.prototype.add = SetCache.prototype.push = setCacheAdd\n SetCache.prototype.has = setCacheHas\n\n /**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true\n }\n }\n return false\n }\n\n /**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function cacheHas(cache, key) {\n return cache.has(key)\n }\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG$5 = 1,\n COMPARE_UNORDERED_FLAG$3 = 2\n\n /**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\n function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG$5,\n arrLength = array.length,\n othLength = other.length\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array)\n var othStacked = stack.get(other)\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array\n }\n var index = -1,\n result = true,\n seen = bitmask & COMPARE_UNORDERED_FLAG$3 ? new SetCache() : undefined\n\n stack.set(array, other)\n stack.set(other, array)\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index]\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack)\n }\n if (compared !== undefined) {\n if (compared) {\n continue\n }\n result = false\n break\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (\n !arraySome(other, function (othValue, othIndex) {\n if (\n !cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))\n ) {\n return seen.push(othIndex)\n }\n })\n ) {\n result = false\n break\n }\n } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n result = false\n break\n }\n }\n stack['delete'](array)\n stack['delete'](other)\n return result\n }\n\n /**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\n function mapToArray(map) {\n var index = -1,\n result = Array(map.size)\n\n map.forEach(function (value, key) {\n result[++index] = [key, value]\n })\n return result\n }\n\n /**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\n function setToArray(set) {\n var index = -1,\n result = Array(set.size)\n\n set.forEach(function (value) {\n result[++index] = value\n })\n return result\n }\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG$4 = 1,\n COMPARE_UNORDERED_FLAG$2 = 2\n\n /** `Object#toString` result references. */\n var boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag$1 = '[object Map]',\n numberTag = '[object Number]',\n regexpTag$1 = '[object RegExp]',\n setTag$1 = '[object Set]',\n stringTag$1 = '[object String]',\n symbolTag = '[object Symbol]'\n\n var arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]'\n\n /** Used to convert symbols to primitives and strings. */\n var symbolProto = Symbol$2 ? Symbol$2.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined\n\n /**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) {\n return false\n }\n object = object.buffer\n other = other.buffer\n\n case arrayBufferTag:\n if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array$1(object), new Uint8Array$1(other))) {\n return false\n }\n return true\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other)\n\n case errorTag:\n return object.name == other.name && object.message == other.message\n\n case regexpTag$1:\n case stringTag$1:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == other + ''\n\n case mapTag$1:\n var convert = mapToArray\n\n case setTag$1:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG$4\n convert || (convert = setToArray)\n\n if (object.size != other.size && !isPartial) {\n return false\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object)\n if (stacked) {\n return stacked == other\n }\n bitmask |= COMPARE_UNORDERED_FLAG$2\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other)\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack)\n stack['delete'](object)\n return result\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other)\n }\n }\n return false\n }\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG$3 = 1\n\n /** Used for built-in method references. */\n var objectProto$5 = Object.prototype\n\n /** Used to check objects for own properties. */\n var hasOwnProperty$5 = objectProto$5.hasOwnProperty\n\n /**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG$3,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length\n\n if (objLength != othLength && !isPartial) {\n return false\n }\n var index = objLength\n while (index--) {\n var key = objProps[index]\n if (!(isPartial ? key in other : hasOwnProperty$5.call(other, key))) {\n return false\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object)\n var othStacked = stack.get(other)\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object\n }\n var result = true\n stack.set(object, other)\n stack.set(other, object)\n\n var skipCtor = isPartial\n while (++index < objLength) {\n key = objProps[index]\n var objValue = object[key],\n othValue = other[key]\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack)\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (\n !(compared === undefined\n ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)\n : compared)\n ) {\n result = false\n break\n }\n skipCtor || (skipCtor = key == 'constructor')\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor\n\n // Non `Object` object instances with different constructors are not equal.\n if (\n objCtor != othCtor &&\n 'constructor' in object &&\n 'constructor' in other &&\n !(\n typeof objCtor == 'function' &&\n objCtor instanceof objCtor &&\n typeof othCtor == 'function' &&\n othCtor instanceof othCtor\n )\n ) {\n result = false\n }\n }\n stack['delete'](object)\n stack['delete'](other)\n return result\n }\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG$2 = 1\n\n /** `Object#toString` result references. */\n var argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]'\n\n /** Used for built-in method references. */\n var objectProto$4 = Object.prototype\n\n /** Used to check objects for own properties. */\n var hasOwnProperty$4 = objectProto$4.hasOwnProperty\n\n /**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray$1(object),\n othIsArr = isArray$1(other),\n objTag = objIsArr ? arrayTag : getTag$1(object),\n othTag = othIsArr ? arrayTag : getTag$1(other)\n\n objTag = objTag == argsTag ? objectTag : objTag\n othTag = othTag == argsTag ? objectTag : othTag\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag\n\n if (isSameTag && isBuffer$1(object)) {\n if (!isBuffer$1(other)) {\n return false\n }\n objIsArr = true\n objIsObj = false\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack())\n return objIsArr || isTypedArray$1(object)\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack)\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG$2)) {\n var objIsWrapped = objIsObj && hasOwnProperty$4.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty$4.call(other, '__wrapped__')\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other\n\n stack || (stack = new Stack())\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack)\n }\n }\n if (!isSameTag) {\n return false\n }\n stack || (stack = new Stack())\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack)\n }\n\n /**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\n function baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack)\n }\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG$1 = 1,\n COMPARE_UNORDERED_FLAG$1 = 2\n\n /**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\n function baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer\n\n if (object == null) {\n return !length\n }\n object = Object(object)\n while (index--) {\n var data = matchData[index]\n if (noCustomizer && data[2] ? data[1] !== object[data[0]] : !(data[0] in object)) {\n return false\n }\n }\n while (++index < length) {\n data = matchData[index]\n var key = data[0],\n objValue = object[key],\n srcValue = data[1]\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false\n }\n } else {\n var stack = new Stack()\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack)\n }\n if (\n !(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG$1 | COMPARE_UNORDERED_FLAG$1, customizer, stack)\n : result)\n ) {\n return false\n }\n }\n }\n return true\n }\n\n /**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\n function isStrictComparable(value) {\n return value === value && !isObject(value)\n }\n\n /**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\n function getMatchData(object) {\n var result = keys(object),\n length = result.length\n\n while (length--) {\n var key = result[length],\n value = object[key]\n\n result[length] = [key, value, isStrictComparable(value)]\n }\n return result\n }\n\n /**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function matchesStrictComparable(key, srcValue) {\n return function (object) {\n if (object == null) {\n return false\n }\n return object[key] === srcValue && (srcValue !== undefined || key in Object(object))\n }\n }\n\n /**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatches(source) {\n var matchData = getMatchData(source)\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1])\n }\n return function (object) {\n return object === source || baseIsMatch(object, source, matchData)\n }\n }\n\n /**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHasIn(object, key) {\n return object != null && key in Object(object)\n }\n\n /**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\n function hasPath(object, path, hasFunc) {\n path = castPath(path, object)\n\n var index = -1,\n length = path.length,\n result = false\n\n while (++index < length) {\n var key = toKey(path[index])\n if (!(result = object != null && hasFunc(object, key))) {\n break\n }\n object = object[key]\n }\n if (result || ++index != length) {\n return result\n }\n length = object == null ? 0 : object.length\n return !!length && isLength(length) && isIndex(key, length) && (isArray$1(object) || isArguments$1(object))\n }\n\n /**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\n function hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn)\n }\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2\n\n /**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue)\n }\n return function (object) {\n var objValue = get(object, path)\n return objValue === undefined && objValue === srcValue\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG)\n }\n }\n\n /**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function baseProperty(key) {\n return function (object) {\n return object == null ? undefined : object[key]\n }\n }\n\n /**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyDeep(path) {\n return function (object) {\n return baseGet(object, path)\n }\n }\n\n /**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\n function property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path)\n }\n\n /**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\n function baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value\n }\n if (value == null) {\n return identity\n }\n if (typeof value == 'object') {\n return isArray$1(value) ? baseMatchesProperty(value[0], value[1]) : baseMatches(value)\n }\n return property(value)\n }\n\n /**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length\n\n while (++index < length) {\n var value = array[index]\n setter(accumulator, value, iteratee(value), array)\n }\n return accumulator\n }\n\n /**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseFor(fromRight) {\n return function (object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length\n\n while (length--) {\n var key = props[fromRight ? length : ++index]\n if (iteratee(iterable[key], key, iterable) === false) {\n break\n }\n }\n return object\n }\n }\n\n /**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseFor = createBaseFor()\n\n const baseFor$1 = baseFor\n\n /**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwn(object, iteratee) {\n return object && baseFor$1(object, iteratee, keys)\n }\n\n /**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseEach(eachFunc, fromRight) {\n return function (collection, iteratee) {\n if (collection == null) {\n return collection\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee)\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection)\n\n while (fromRight ? index-- : ++index < length) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break\n }\n }\n return collection\n }\n }\n\n /**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEach = createBaseEach(baseForOwn)\n\n const baseEach$1 = baseEach\n\n /**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach$1(collection, function (value, key, collection) {\n setter(accumulator, value, iteratee(value), collection)\n })\n return accumulator\n }\n\n /**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\n function createAggregator(setter, initializer) {\n return function (collection, iteratee) {\n var func = isArray$1(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {}\n\n return func(collection, setter, baseIteratee(iteratee), accumulator)\n }\n }\n\n /** Used for built-in method references. */\n var objectProto$3 = Object.prototype\n\n /** Used to check objects for own properties. */\n var hasOwnProperty$3 = objectProto$3.hasOwnProperty\n\n /**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var defaults = baseRest(function (object, sources) {\n object = Object(object)\n\n var index = -1\n var length = sources.length\n var guard = length > 2 ? sources[2] : undefined\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1\n }\n\n while (++index < length) {\n var source = sources[index]\n var props = keysIn(source)\n var propsIndex = -1\n var propsLength = props.length\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex]\n var value = object[key]\n\n if (value === undefined || (eq(value, objectProto$3[key]) && !hasOwnProperty$3.call(object, key))) {\n object[key] = source[key]\n }\n }\n }\n\n return object\n })\n\n const defaults$1 = defaults\n\n /**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\n function isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value)\n }\n\n /**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true\n }\n }\n return false\n }\n\n /** Used as the size to enable large array optimizations. */\n var LARGE_ARRAY_SIZE$1 = 200\n\n /**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\n function baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length\n\n if (!length) {\n return result\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee))\n }\n if (comparator) {\n includes = arrayIncludesWith\n isCommon = false\n } else if (values.length >= LARGE_ARRAY_SIZE$1) {\n includes = cacheHas\n isCommon = false\n values = new SetCache(values)\n }\n outer: while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value)\n\n value = comparator || value !== 0 ? value : 0\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer\n }\n }\n result.push(value)\n } else if (!includes(values, computed, comparator)) {\n result.push(value)\n }\n }\n return result\n }\n\n /**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\n var difference = baseRest(function (array, values) {\n return isArrayLikeObject(array) ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) : []\n })\n\n const difference$1 = difference\n\n /**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\n function last(array) {\n var length = array == null ? 0 : array.length\n return length ? array[length - 1] : undefined\n }\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.drop([1, 2, 3]);\n * // => [2, 3]\n *\n * _.drop([1, 2, 3], 2);\n * // => [3]\n *\n * _.drop([1, 2, 3], 5);\n * // => []\n *\n * _.drop([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function drop(array, n, guard) {\n var length = array == null ? 0 : array.length\n if (!length) {\n return []\n }\n n = guard || n === undefined ? 1 : toInteger(n)\n return baseSlice(array, n < 0 ? 0 : n, length)\n }\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.dropRight([1, 2, 3]);\n * // => [1, 2]\n *\n * _.dropRight([1, 2, 3], 2);\n * // => [1]\n *\n * _.dropRight([1, 2, 3], 5);\n * // => []\n *\n * _.dropRight([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function dropRight(array, n, guard) {\n var length = array == null ? 0 : array.length\n if (!length) {\n return []\n }\n n = guard || n === undefined ? 1 : toInteger(n)\n n = length - n\n return baseSlice(array, 0, n < 0 ? 0 : n)\n }\n\n /**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\n function castFunction(value) {\n return typeof value == 'function' ? value : identity\n }\n\n /**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forEach(collection, iteratee) {\n var func = isArray$1(collection) ? arrayEach : baseEach$1\n return func(collection, castFunction(iteratee))\n }\n\n /**\n * A specialized version of `_.every` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n */\n function arrayEvery(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length\n\n while (++index < length) {\n if (!predicate(array[index], index, array)) {\n return false\n }\n }\n return true\n }\n\n /**\n * The base implementation of `_.every` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`\n */\n function baseEvery(collection, predicate) {\n var result = true\n baseEach$1(collection, function (value, index, collection) {\n result = !!predicate(value, index, collection)\n return result\n })\n return result\n }\n\n /**\n * Checks if `predicate` returns truthy for **all** elements of `collection`.\n * Iteration is stopped once `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `true` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\n function every(collection, predicate, guard) {\n var func = isArray$1(collection) ? arrayEvery : baseEvery\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined\n }\n return func(collection, baseIteratee(predicate))\n }\n\n /**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function baseFilter(collection, predicate) {\n var result = []\n baseEach$1(collection, function (value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value)\n }\n })\n return result\n }\n\n /**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n *\n * // Combining several predicates using `_.overEvery` or `_.overSome`.\n * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n * // => objects for ['fred', 'barney']\n */\n function filter(collection, predicate) {\n var func = isArray$1(collection) ? arrayFilter : baseFilter\n return func(collection, baseIteratee(predicate))\n }\n\n /**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\n function createFind(findIndexFunc) {\n return function (collection, predicate, fromIndex) {\n var iterable = Object(collection)\n if (!isArrayLike(collection)) {\n var iteratee = baseIteratee(predicate)\n collection = keys(collection)\n predicate = function (key) {\n return iteratee(iterable[key], key, iterable)\n }\n }\n var index = findIndexFunc(collection, predicate, fromIndex)\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined\n }\n }\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeMax$2 = Math.max\n\n /**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\n function findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length\n if (!length) {\n return -1\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex)\n if (index < 0) {\n index = nativeMax$2(length + index, 0)\n }\n return baseFindIndex(array, baseIteratee(predicate), index)\n }\n\n /**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\n var find = createFind(findIndex)\n\n const find$1 = find\n\n /**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\n function head(array) {\n return array && array.length ? array[0] : undefined\n }\n\n /**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : []\n\n baseEach$1(collection, function (value, key, collection) {\n result[++index] = iteratee(value, key, collection)\n })\n return result\n }\n\n /**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\n function map(collection, iteratee) {\n var func = isArray$1(collection) ? arrayMap : baseMap\n return func(collection, baseIteratee(iteratee))\n }\n\n /**\n * Creates a flattened array of values by running each element in `collection`\n * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMap(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), 1)\n }\n\n /** Used for built-in method references. */\n var objectProto$2 = Object.prototype\n\n /** Used to check objects for own properties. */\n var hasOwnProperty$2 = objectProto$2.hasOwnProperty\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\n var groupBy = createAggregator(function (result, value, key) {\n if (hasOwnProperty$2.call(result, key)) {\n result[key].push(value)\n } else {\n baseAssignValue(result, key, [value])\n }\n })\n\n const groupBy$1 = groupBy\n\n /** Used for built-in method references. */\n var objectProto$1 = Object.prototype\n\n /** Used to check objects for own properties. */\n var hasOwnProperty$1 = objectProto$1.hasOwnProperty\n\n /**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHas(object, key) {\n return object != null && hasOwnProperty$1.call(object, key)\n }\n\n /**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\n function has(object, path) {\n return object != null && hasPath(object, path, baseHas)\n }\n\n /** `Object#toString` result references. */\n var stringTag = '[object String]'\n\n /**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\n function isString(value) {\n return typeof value == 'string' || (!isArray$1(value) && isObjectLike(value) && baseGetTag(value) == stringTag)\n }\n\n /**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\n function baseValues(object, props) {\n return arrayMap(props, function (key) {\n return object[key]\n })\n }\n\n /**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\n function values(object) {\n return object == null ? [] : baseValues(object, keys(object))\n }\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeMax$1 = Math.max\n\n /**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\n function includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection)\n fromIndex = fromIndex && !guard ? toInteger(fromIndex) : 0\n\n var length = collection.length\n if (fromIndex < 0) {\n fromIndex = nativeMax$1(length + fromIndex, 0)\n }\n return isString(collection)\n ? fromIndex <= length && collection.indexOf(value, fromIndex) > -1\n : !!length && baseIndexOf(collection, value, fromIndex) > -1\n }\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeMax = Math.max\n\n /**\n * Gets the index at which the first occurrence of `value` is found in `array`\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. If `fromIndex` is negative, it's used as the\n * offset from the end of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.indexOf([1, 2, 1, 2], 2);\n * // => 1\n *\n * // Search from the `fromIndex`.\n * _.indexOf([1, 2, 1, 2], 2, 2);\n * // => 3\n */\n function indexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length\n if (!length) {\n return -1\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex)\n if (index < 0) {\n index = nativeMax(length + index, 0)\n }\n return baseIndexOf(array, value, index)\n }\n\n /** `Object#toString` result references. */\n var mapTag = '[object Map]',\n setTag = '[object Set]'\n\n /** Used for built-in method references. */\n var objectProto = Object.prototype\n\n /** Used to check objects for own properties. */\n var hasOwnProperty = objectProto.hasOwnProperty\n\n /**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\n function isEmpty(value) {\n if (value == null) {\n return true\n }\n if (\n isArrayLike(value) &&\n (isArray$1(value) ||\n typeof value == 'string' ||\n typeof value.splice == 'function' ||\n isBuffer$1(value) ||\n isTypedArray$1(value) ||\n isArguments$1(value))\n ) {\n return !value.length\n }\n var tag = getTag$1(value)\n if (tag == mapTag || tag == setTag) {\n return !value.size\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false\n }\n }\n return true\n }\n\n /** `Object#toString` result references. */\n var regexpTag = '[object RegExp]'\n\n /**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\n function baseIsRegExp(value) {\n return isObjectLike(value) && baseGetTag(value) == regexpTag\n }\n\n /* Node.js helper references. */\n var nodeIsRegExp = nodeUtil$1 && nodeUtil$1.isRegExp\n\n /**\n * Checks if `value` is classified as a `RegExp` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\n var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp\n\n const isRegExp$1 = isRegExp\n\n /**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\n function isUndefined(value) {\n return value === undefined\n }\n\n /** Error message constants. */\n var FUNC_ERROR_TEXT = 'Expected a function'\n\n /**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n * return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\n function negate(predicate) {\n if (typeof predicate != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT)\n }\n return function () {\n var args = arguments\n switch (args.length) {\n case 0:\n return !predicate.call(this)\n case 1:\n return !predicate.call(this, args[0])\n case 2:\n return !predicate.call(this, args[0], args[1])\n case 3:\n return !predicate.call(this, args[0], args[1], args[2])\n }\n return !predicate.apply(this, args)\n }\n }\n\n /**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object\n }\n path = castPath(path, object)\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object\n }\n\n if (index != lastIndex) {\n var objValue = nested[key]\n newValue = customizer ? customizer(objValue, key, nested) : undefined\n if (newValue === undefined) {\n newValue = isObject(objValue) ? objValue : isIndex(path[index + 1]) ? [] : {}\n }\n }\n assignValue(nested, key, newValue)\n nested = nested[key]\n }\n return object\n }\n\n /**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\n function basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {}\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path)\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value)\n }\n }\n return result\n }\n\n /**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\n function pickBy(object, predicate) {\n if (object == null) {\n return {}\n }\n var props = arrayMap(getAllKeysIn(object), function (prop) {\n return [prop]\n })\n predicate = baseIteratee(predicate)\n return basePickBy(object, props, function (value, path) {\n return predicate(value, path[0])\n })\n }\n\n /**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\n function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function (value, index, collection) {\n accumulator = initAccum ? ((initAccum = false), value) : iteratee(accumulator, value, index, collection)\n })\n return accumulator\n }\n\n /**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\n function reduce(collection, iteratee, accumulator) {\n var func = isArray$1(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3\n\n return func(collection, baseIteratee(iteratee), accumulator, initAccum, baseEach$1)\n }\n\n /**\n * The opposite of `_.filter`; this method returns the elements of `collection`\n * that `predicate` does **not** return truthy for.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.filter\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true }\n * ];\n *\n * _.reject(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.reject(users, { 'age': 40, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.reject(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.reject(users, 'active');\n * // => objects for ['barney']\n */\n function reject(collection, predicate) {\n var func = isArray$1(collection) ? arrayFilter : baseFilter\n return func(collection, negate(baseIteratee(predicate)))\n }\n\n /**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function baseSome(collection, predicate) {\n var result\n\n baseEach$1(collection, function (value, index, collection) {\n result = predicate(value, index, collection)\n return !result\n })\n return !!result\n }\n\n /**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\n function some(collection, predicate, guard) {\n var func = isArray$1(collection) ? arraySome : baseSome\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined\n }\n return func(collection, baseIteratee(predicate))\n }\n\n /** Used as references for various `Number` constants. */\n var INFINITY = 1 / 0\n\n /**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\n var createSet = !(Set$1 && 1 / setToArray(new Set$1([, -0]))[1] == INFINITY)\n ? noop\n : function (values) {\n return new Set$1(values)\n }\n\n const createSet$1 = createSet\n\n /** Used as the size to enable large array optimizations. */\n var LARGE_ARRAY_SIZE = 200\n\n /**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result\n\n if (comparator) {\n isCommon = false\n includes = arrayIncludesWith\n } else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet$1(array)\n if (set) {\n return setToArray(set)\n }\n isCommon = false\n includes = cacheHas\n seen = new SetCache()\n } else {\n seen = iteratee ? [] : result\n }\n outer: while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value\n\n value = comparator || value !== 0 ? value : 0\n if (isCommon && computed === computed) {\n var seenIndex = seen.length\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer\n }\n }\n if (iteratee) {\n seen.push(computed)\n }\n result.push(value)\n } else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed)\n }\n result.push(value)\n }\n }\n return result\n }\n\n /**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\n function uniq(array) {\n return array && array.length ? baseUniq(array) : []\n }\n\n function PRINT_ERROR(msg) {\n /* istanbul ignore else - can't override global.console in node.js */\n if (console && console.error) {\n console.error(`Error: ${msg}`)\n }\n }\n function PRINT_WARNING(msg) {\n /* istanbul ignore else - can't override global.console in node.js*/\n if (console && console.warn) {\n // TODO: modify docs accordingly\n console.warn(`Warning: ${msg}`)\n }\n }\n\n function timer(func) {\n const start = new Date().getTime()\n const val = func()\n const end = new Date().getTime()\n const total = end - start\n return { time: total, value: val }\n }\n\n // based on: https://github.com/petkaantonov/bluebird/blob/b97c0d2d487e8c5076e8bd897e0dcd4622d31846/src/util.js#L201-L216\n function toFastProperties(toBecomeFast) {\n function FakeConstructor() {}\n // If our object is used as a constructor, it would receive\n FakeConstructor.prototype = toBecomeFast\n const fakeInstance = new FakeConstructor()\n function fakeAccess() {\n return typeof fakeInstance.bar\n }\n // help V8 understand this is a \"real\" prototype by actually using\n // the fake instance.\n fakeAccess()\n fakeAccess()\n // Always true condition to suppress the Firefox warning of unreachable\n // code after a return statement.\n return toBecomeFast\n }\n\n // TODO: duplicated code to avoid extracting another sub-package -- how to avoid?\n function tokenLabel$1(tokType) {\n if (hasTokenLabel$1(tokType)) {\n return tokType.LABEL\n } else {\n return tokType.name\n }\n }\n // TODO: duplicated code to avoid extracting another sub-package -- how to avoid?\n function hasTokenLabel$1(obj) {\n return isString(obj.LABEL) && obj.LABEL !== ''\n }\n class AbstractProduction {\n get definition() {\n return this._definition\n }\n set definition(value) {\n this._definition = value\n }\n constructor(_definition) {\n this._definition = _definition\n }\n accept(visitor) {\n visitor.visit(this)\n forEach(this.definition, (prod) => {\n prod.accept(visitor)\n })\n }\n }\n class NonTerminal extends AbstractProduction {\n constructor(options) {\n super([])\n this.idx = 1\n assign$1(\n this,\n pickBy(options, (v) => v !== undefined),\n )\n }\n set definition(definition) {\n // immutable\n }\n get definition() {\n if (this.referencedRule !== undefined) {\n return this.referencedRule.definition\n }\n return []\n }\n accept(visitor) {\n visitor.visit(this)\n // don't visit children of a reference, we will get cyclic infinite loops if we do so\n }\n }\n class Rule extends AbstractProduction {\n constructor(options) {\n super(options.definition)\n this.orgText = ''\n assign$1(\n this,\n pickBy(options, (v) => v !== undefined),\n )\n }\n }\n class Alternative extends AbstractProduction {\n constructor(options) {\n super(options.definition)\n this.ignoreAmbiguities = false\n assign$1(\n this,\n pickBy(options, (v) => v !== undefined),\n )\n }\n }\n class Option extends AbstractProduction {\n constructor(options) {\n super(options.definition)\n this.idx = 1\n assign$1(\n this,\n pickBy(options, (v) => v !== undefined),\n )\n }\n }\n class RepetitionMandatory extends AbstractProduction {\n constructor(options) {\n super(options.definition)\n this.idx = 1\n assign$1(\n this,\n pickBy(options, (v) => v !== undefined),\n )\n }\n }\n class RepetitionMandatoryWithSeparator extends AbstractProduction {\n constructor(options) {\n super(options.definition)\n this.idx = 1\n assign$1(\n this,\n pickBy(options, (v) => v !== undefined),\n )\n }\n }\n class Repetition extends AbstractProduction {\n constructor(options) {\n super(options.definition)\n this.idx = 1\n assign$1(\n this,\n pickBy(options, (v) => v !== undefined),\n )\n }\n }\n class RepetitionWithSeparator extends AbstractProduction {\n constructor(options) {\n super(options.definition)\n this.idx = 1\n assign$1(\n this,\n pickBy(options, (v) => v !== undefined),\n )\n }\n }\n class Alternation extends AbstractProduction {\n get definition() {\n return this._definition\n }\n set definition(value) {\n this._definition = value\n }\n constructor(options) {\n super(options.definition)\n this.idx = 1\n this.ignoreAmbiguities = false\n this.hasPredicates = false\n assign$1(\n this,\n pickBy(options, (v) => v !== undefined),\n )\n }\n }\n class Terminal {\n constructor(options) {\n this.idx = 1\n assign$1(\n this,\n pickBy(options, (v) => v !== undefined),\n )\n }\n accept(visitor) {\n visitor.visit(this)\n }\n }\n function serializeGrammar(topRules) {\n return map(topRules, serializeProduction)\n }\n function serializeProduction(node) {\n function convertDefinition(definition) {\n return map(definition, serializeProduction)\n }\n /* istanbul ignore else */\n if (node instanceof NonTerminal) {\n const serializedNonTerminal = {\n type: 'NonTerminal',\n name: node.nonTerminalName,\n idx: node.idx,\n }\n if (isString(node.label)) {\n serializedNonTerminal.label = node.label\n }\n return serializedNonTerminal\n } else if (node instanceof Alternative) {\n return {\n type: 'Alternative',\n definition: convertDefinition(node.definition),\n }\n } else if (node instanceof Option) {\n return {\n type: 'Option',\n idx: node.idx,\n definition: convertDefinition(node.definition),\n }\n } else if (node instanceof RepetitionMandatory) {\n return {\n type: 'RepetitionMandatory',\n idx: node.idx,\n definition: convertDefinition(node.definition),\n }\n } else if (node instanceof RepetitionMandatoryWithSeparator) {\n return {\n type: 'RepetitionMandatoryWithSeparator',\n idx: node.idx,\n separator: serializeProduction(new Terminal({ terminalType: node.separator })),\n definition: convertDefinition(node.definition),\n }\n } else if (node instanceof RepetitionWithSeparator) {\n return {\n type: 'RepetitionWithSeparator',\n idx: node.idx,\n separator: serializeProduction(new Terminal({ terminalType: node.separator })),\n definition: convertDefinition(node.definition),\n }\n } else if (node instanceof Repetition) {\n return {\n type: 'Repetition',\n idx: node.idx,\n definition: convertDefinition(node.definition),\n }\n } else if (node instanceof Alternation) {\n return {\n type: 'Alternation',\n idx: node.idx,\n definition: convertDefinition(node.definition),\n }\n } else if (node instanceof Terminal) {\n const serializedTerminal = {\n type: 'Terminal',\n name: node.terminalType.name,\n label: tokenLabel$1(node.terminalType),\n idx: node.idx,\n }\n if (isString(node.label)) {\n serializedTerminal.terminalLabel = node.label\n }\n const pattern = node.terminalType.PATTERN\n if (node.terminalType.PATTERN) {\n serializedTerminal.pattern = isRegExp$1(pattern) ? pattern.source : pattern\n }\n return serializedTerminal\n } else if (node instanceof Rule) {\n return {\n type: 'Rule',\n name: node.name,\n orgText: node.orgText,\n definition: convertDefinition(node.definition),\n }\n /* c8 ignore next 3 */\n } else {\n throw Error('non exhaustive match')\n }\n }\n\n class GAstVisitor {\n visit(node) {\n const nodeAny = node\n switch (nodeAny.constructor) {\n case NonTerminal:\n return this.visitNonTerminal(nodeAny)\n case Alternative:\n return this.visitAlternative(nodeAny)\n case Option:\n return this.visitOption(nodeAny)\n case RepetitionMandatory:\n return this.visitRepetitionMandatory(nodeAny)\n case RepetitionMandatoryWithSeparator:\n return this.visitRepetitionMandatoryWithSeparator(nodeAny)\n case RepetitionWithSeparator:\n return this.visitRepetitionWithSeparator(nodeAny)\n case Repetition:\n return this.visitRepetition(nodeAny)\n case Alternation:\n return this.visitAlternation(nodeAny)\n case Terminal:\n return this.visitTerminal(nodeAny)\n case Rule:\n return this.visitRule(nodeAny)\n /* c8 ignore next 2 */\n default:\n throw Error('non exhaustive match')\n }\n }\n /* c8 ignore next */\n visitNonTerminal(node) {}\n /* c8 ignore next */\n visitAlternative(node) {}\n /* c8 ignore next */\n visitOption(node) {}\n /* c8 ignore next */\n visitRepetition(node) {}\n /* c8 ignore next */\n visitRepetitionMandatory(node) {}\n /* c8 ignore next 3 */\n visitRepetitionMandatoryWithSeparator(node) {}\n /* c8 ignore next */\n visitRepetitionWithSeparator(node) {}\n /* c8 ignore next */\n visitAlternation(node) {}\n /* c8 ignore next */\n visitTerminal(node) {}\n /* c8 ignore next */\n visitRule(node) {}\n }\n\n function isSequenceProd(prod) {\n return (\n prod instanceof Alternative ||\n prod instanceof Option ||\n prod instanceof Repetition ||\n prod instanceof RepetitionMandatory ||\n prod instanceof RepetitionMandatoryWithSeparator ||\n prod instanceof RepetitionWithSeparator ||\n prod instanceof Terminal ||\n prod instanceof Rule\n )\n }\n function isOptionalProd(prod, alreadyVisited = []) {\n const isDirectlyOptional =\n prod instanceof Option || prod instanceof Repetition || prod instanceof RepetitionWithSeparator\n if (isDirectlyOptional) {\n return true\n }\n // note that this can cause infinite loop if one optional empty TOP production has a cyclic dependency with another\n // empty optional top rule\n // may be indirectly optional ((A?B?C?) | (D?E?F?))\n if (prod instanceof Alternation) {\n // for OR its enough for just one of the alternatives to be optional\n return some(prod.definition, (subProd) => {\n return isOptionalProd(subProd, alreadyVisited)\n })\n } else if (prod instanceof NonTerminal && includes(alreadyVisited, prod)) {\n // avoiding stack overflow due to infinite recursion\n return false\n } else if (prod instanceof AbstractProduction) {\n if (prod instanceof NonTerminal) {\n alreadyVisited.push(prod)\n }\n return every(prod.definition, (subProd) => {\n return isOptionalProd(subProd, alreadyVisited)\n })\n } else {\n return false\n }\n }\n function isBranchingProd(prod) {\n return prod instanceof Alternation\n }\n function getProductionDslName(prod) {\n /* istanbul ignore else */\n if (prod instanceof NonTerminal) {\n return 'SUBRULE'\n } else if (prod instanceof Option) {\n return 'OPTION'\n } else if (prod instanceof Alternation) {\n return 'OR'\n } else if (prod instanceof RepetitionMandatory) {\n return 'AT_LEAST_ONE'\n } else if (prod instanceof RepetitionMandatoryWithSeparator) {\n return 'AT_LEAST_ONE_SEP'\n } else if (prod instanceof RepetitionWithSeparator) {\n return 'MANY_SEP'\n } else if (prod instanceof Repetition) {\n return 'MANY'\n } else if (prod instanceof Terminal) {\n return 'CONSUME'\n /* c8 ignore next 3 */\n } else {\n throw Error('non exhaustive match')\n }\n }\n\n /**\n * A Grammar Walker that computes the \"remaining\" grammar \"after\" a productions in the grammar.\n */\n class RestWalker {\n walk(prod, prevRest = []) {\n forEach(prod.definition, (subProd, index) => {\n const currRest = drop(prod.definition, index + 1)\n /* istanbul ignore else */\n if (subProd instanceof NonTerminal) {\n this.walkProdRef(subProd, currRest, prevRest)\n } else if (subProd instanceof Terminal) {\n this.walkTerminal(subProd, currRest, prevRest)\n } else if (subProd instanceof Alternative) {\n this.walkFlat(subProd, currRest, prevRest)\n } else if (subProd instanceof Option) {\n this.walkOption(subProd, currRest, prevRest)\n } else if (subProd instanceof RepetitionMandatory) {\n this.walkAtLeastOne(subProd, currRest, prevRest)\n } else if (subProd instanceof RepetitionMandatoryWithSeparator) {\n this.walkAtLeastOneSep(subProd, currRest, prevRest)\n } else if (subProd instanceof RepetitionWithSeparator) {\n this.walkManySep(subProd, currRest, prevRest)\n } else if (subProd instanceof Repetition) {\n this.walkMany(subProd, currRest, prevRest)\n } else if (subProd instanceof Alternation) {\n this.walkOr(subProd, currRest, prevRest)\n } else {\n throw Error('non exhaustive match')\n }\n })\n }\n walkTerminal(terminal, currRest, prevRest) {}\n walkProdRef(refProd, currRest, prevRest) {}\n walkFlat(flatProd, currRest, prevRest) {\n // ABCDEF => after the D the rest is EF\n const fullOrRest = currRest.concat(prevRest)\n this.walk(flatProd, fullOrRest)\n }\n walkOption(optionProd, currRest, prevRest) {\n // ABC(DE)?F => after the (DE)? the rest is F\n const fullOrRest = currRest.concat(prevRest)\n this.walk(optionProd, fullOrRest)\n }\n walkAtLeastOne(atLeastOneProd, currRest, prevRest) {\n // ABC(DE)+F => after the (DE)+ the rest is (DE)?F\n const fullAtLeastOneRest = [new Option({ definition: atLeastOneProd.definition })].concat(currRest, prevRest)\n this.walk(atLeastOneProd, fullAtLeastOneRest)\n }\n walkAtLeastOneSep(atLeastOneSepProd, currRest, prevRest) {\n // ABC DE(,DE)* F => after the (,DE)+ the rest is (,DE)?F\n const fullAtLeastOneSepRest = restForRepetitionWithSeparator(atLeastOneSepProd, currRest, prevRest)\n this.walk(atLeastOneSepProd, fullAtLeastOneSepRest)\n }\n walkMany(manyProd, currRest, prevRest) {\n // ABC(DE)*F => after the (DE)* the rest is (DE)?F\n const fullManyRest = [new Option({ definition: manyProd.definition })].concat(currRest, prevRest)\n this.walk(manyProd, fullManyRest)\n }\n walkManySep(manySepProd, currRest, prevRest) {\n // ABC (DE(,DE)*)? F => after the (,DE)* the rest is (,DE)?F\n const fullManySepRest = restForRepetitionWithSeparator(manySepProd, currRest, prevRest)\n this.walk(manySepProd, fullManySepRest)\n }\n walkOr(orProd, currRest, prevRest) {\n // ABC(D|E|F)G => when finding the (D|E|F) the rest is G\n const fullOrRest = currRest.concat(prevRest)\n // walk all different alternatives\n forEach(orProd.definition, (alt) => {\n // wrapping each alternative in a single definition wrapper\n // to avoid errors in computing the rest of that alternative in the invocation to computeInProdFollows\n // (otherwise for OR([alt1,alt2]) alt2 will be considered in 'rest' of alt1\n const prodWrapper = new Alternative({ definition: [alt] })\n this.walk(prodWrapper, fullOrRest)\n })\n }\n }\n function restForRepetitionWithSeparator(repSepProd, currRest, prevRest) {\n const repSepRest = [\n new Option({\n definition: [new Terminal({ terminalType: repSepProd.separator })].concat(repSepProd.definition),\n }),\n ]\n const fullRepSepRest = repSepRest.concat(currRest, prevRest)\n return fullRepSepRest\n }\n\n function first(prod) {\n /* istanbul ignore else */\n if (prod instanceof NonTerminal) {\n // this could in theory cause infinite loops if\n // (1) prod A refs prod B.\n // (2) prod B refs prod A\n // (3) AB can match the empty set\n // in other words a cycle where everything is optional so the first will keep\n // looking ahead for the next optional part and will never exit\n // currently there is no safeguard for this unique edge case because\n // (1) not sure a grammar in which this can happen is useful for anything (productive)\n return first(prod.referencedRule)\n } else if (prod instanceof Terminal) {\n return firstForTerminal(prod)\n } else if (isSequenceProd(prod)) {\n return firstForSequence(prod)\n } else if (isBranchingProd(prod)) {\n return firstForBranching(prod)\n } else {\n throw Error('non exhaustive match')\n }\n }\n function firstForSequence(prod) {\n let firstSet = []\n const seq = prod.definition\n let nextSubProdIdx = 0\n let hasInnerProdsRemaining = seq.length > nextSubProdIdx\n let currSubProd\n // so we enter the loop at least once (if the definition is not empty\n let isLastInnerProdOptional = true\n // scan a sequence until it's end or until we have found a NONE optional production in it\n while (hasInnerProdsRemaining && isLastInnerProdOptional) {\n currSubProd = seq[nextSubProdIdx]\n isLastInnerProdOptional = isOptionalProd(currSubProd)\n firstSet = firstSet.concat(first(currSubProd))\n nextSubProdIdx = nextSubProdIdx + 1\n hasInnerProdsRemaining = seq.length > nextSubProdIdx\n }\n return uniq(firstSet)\n }\n function firstForBranching(prod) {\n const allAlternativesFirsts = map(prod.definition, (innerProd) => {\n return first(innerProd)\n })\n return uniq(flatten(allAlternativesFirsts))\n }\n function firstForTerminal(terminal) {\n return [terminal.terminalType]\n }\n\n // TODO: can this be removed? where is it used?\n const IN = '_~IN~_'\n\n // This ResyncFollowsWalker computes all of the follows required for RESYNC\n // (skipping reference production).\n class ResyncFollowsWalker extends RestWalker {\n constructor(topProd) {\n super()\n this.topProd = topProd\n this.follows = {}\n }\n startWalking() {\n this.walk(this.topProd)\n return this.follows\n }\n walkTerminal(terminal, currRest, prevRest) {\n // do nothing! just like in the public sector after 13:00\n }\n walkProdRef(refProd, currRest, prevRest) {\n const followName = buildBetweenProdsFollowPrefix(refProd.referencedRule, refProd.idx) + this.topProd.name\n const fullRest = currRest.concat(prevRest)\n const restProd = new Alternative({ definition: fullRest })\n const t_in_topProd_follows = first(restProd)\n this.follows[followName] = t_in_topProd_follows\n }\n }\n function computeAllProdsFollows(topProductions) {\n const reSyncFollows = {}\n forEach(topProductions, (topProd) => {\n const currRefsFollow = new ResyncFollowsWalker(topProd).startWalking()\n assign$1(reSyncFollows, currRefsFollow)\n })\n return reSyncFollows\n }\n function buildBetweenProdsFollowPrefix(inner, occurenceInParent) {\n return inner.name + occurenceInParent + IN\n }\n\n function cc(char) {\n return char.charCodeAt(0)\n }\n function insertToSet(item, set) {\n if (Array.isArray(item)) {\n item.forEach(function (subItem) {\n set.push(subItem)\n })\n } else {\n set.push(item)\n }\n }\n function addFlag(flagObj, flagKey) {\n if (flagObj[flagKey] === true) {\n throw 'duplicate flag ' + flagKey\n }\n flagObj[flagKey]\n flagObj[flagKey] = true\n }\n function ASSERT_EXISTS(obj) {\n // istanbul ignore next\n if (obj === undefined) {\n throw Error('Internal Error - Should never get here!')\n }\n return true\n }\n // istanbul ignore next\n function ASSERT_NEVER_REACH_HERE() {\n throw Error('Internal Error - Should never get here!')\n }\n function isCharacter(obj) {\n return obj['type'] === 'Character'\n }\n\n const digitsCharCodes = []\n for (let i = cc('0'); i <= cc('9'); i++) {\n digitsCharCodes.push(i)\n }\n const wordCharCodes = [cc('_')].concat(digitsCharCodes)\n for (let i = cc('a'); i <= cc('z'); i++) {\n wordCharCodes.push(i)\n }\n for (let i = cc('A'); i <= cc('Z'); i++) {\n wordCharCodes.push(i)\n }\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#character-classes\n const whitespaceCodes = [\n cc(' '),\n cc('\\f'),\n cc('\\n'),\n cc('\\r'),\n cc('\\t'),\n cc('\\v'),\n cc('\\t'),\n cc('\\u00a0'),\n cc('\\u1680'),\n cc('\\u2000'),\n cc('\\u2001'),\n cc('\\u2002'),\n cc('\\u2003'),\n cc('\\u2004'),\n cc('\\u2005'),\n cc('\\u2006'),\n cc('\\u2007'),\n cc('\\u2008'),\n cc('\\u2009'),\n cc('\\u200a'),\n cc('\\u2028'),\n cc('\\u2029'),\n cc('\\u202f'),\n cc('\\u205f'),\n cc('\\u3000'),\n cc('\\ufeff'),\n ]\n\n // consts and utilities\n const hexDigitPattern = /[0-9a-fA-F]/\n const decimalPattern = /[0-9]/\n const decimalPatternNoZero = /[1-9]/\n // https://hackernoon.com/the-madness-of-parsing-real-world-javascript-regexps-d9ee336df983\n // https://www.ecma-international.org/ecma-262/8.0/index.html#prod-Pattern\n class RegExpParser {\n constructor() {\n this.idx = 0\n this.input = ''\n this.groupIdx = 0\n }\n saveState() {\n return {\n idx: this.idx,\n input: this.input,\n groupIdx: this.groupIdx,\n }\n }\n restoreState(newState) {\n this.idx = newState.idx\n this.input = newState.input\n this.groupIdx = newState.groupIdx\n }\n pattern(input) {\n // parser state\n this.idx = 0\n this.input = input\n this.groupIdx = 0\n this.consumeChar('/')\n const value = this.disjunction()\n this.consumeChar('/')\n const flags = {\n type: 'Flags',\n loc: { begin: this.idx, end: input.length },\n global: false,\n ignoreCase: false,\n multiLine: false,\n unicode: false,\n sticky: false,\n }\n while (this.isRegExpFlag()) {\n switch (this.popChar()) {\n case 'g':\n addFlag(flags, 'global')\n break\n case 'i':\n addFlag(flags, 'ignoreCase')\n break\n case 'm':\n addFlag(flags, 'multiLine')\n break\n case 'u':\n addFlag(flags, 'unicode')\n break\n case 'y':\n addFlag(flags, 'sticky')\n break\n }\n }\n if (this.idx !== this.input.length) {\n throw Error('Redundant input: ' + this.input.substring(this.idx))\n }\n return {\n type: 'Pattern',\n flags: flags,\n value: value,\n loc: this.loc(0),\n }\n }\n disjunction() {\n const alts = []\n const begin = this.idx\n alts.push(this.alternative())\n while (this.peekChar() === '|') {\n this.consumeChar('|')\n alts.push(this.alternative())\n }\n return { type: 'Disjunction', value: alts, loc: this.loc(begin) }\n }\n alternative() {\n const terms = []\n const begin = this.idx\n while (this.isTerm()) {\n terms.push(this.term())\n }\n return { type: 'Alternative', value: terms, loc: this.loc(begin) }\n }\n term() {\n if (this.isAssertion()) {\n return this.assertion()\n } else {\n return this.atom()\n }\n }\n assertion() {\n const begin = this.idx\n switch (this.popChar()) {\n case '^':\n return {\n type: 'StartAnchor',\n loc: this.loc(begin),\n }\n case '$':\n return { type: 'EndAnchor', loc: this.loc(begin) }\n // '\\b' or '\\B'\n case '\\\\':\n switch (this.popChar()) {\n case 'b':\n return {\n type: 'WordBoundary',\n loc: this.loc(begin),\n }\n case 'B':\n return {\n type: 'NonWordBoundary',\n loc: this.loc(begin),\n }\n }\n // istanbul ignore next\n throw Error('Invalid Assertion Escape')\n // '(?=' or '(?!'\n case '(':\n this.consumeChar('?')\n let type\n switch (this.popChar()) {\n case '=':\n type = 'Lookahead'\n break\n case '!':\n type = 'NegativeLookahead'\n break\n }\n ASSERT_EXISTS(type)\n const disjunction = this.disjunction()\n this.consumeChar(')')\n return {\n type: type,\n value: disjunction,\n loc: this.loc(begin),\n }\n }\n // istanbul ignore next\n return ASSERT_NEVER_REACH_HERE()\n }\n quantifier(isBacktracking = false) {\n let range = undefined\n const begin = this.idx\n switch (this.popChar()) {\n case '*':\n range = {\n atLeast: 0,\n atMost: Infinity,\n }\n break\n case '+':\n range = {\n atLeast: 1,\n atMost: Infinity,\n }\n break\n case '?':\n range = {\n atLeast: 0,\n atMost: 1,\n }\n break\n case '{':\n const atLeast = this.integerIncludingZero()\n switch (this.popChar()) {\n case '}':\n range = {\n atLeast: atLeast,\n atMost: atLeast,\n }\n break\n case ',':\n let atMost\n if (this.isDigit()) {\n atMost = this.integerIncludingZero()\n range = {\n atLeast: atLeast,\n atMost: atMost,\n }\n } else {\n range = {\n atLeast: atLeast,\n atMost: Infinity,\n }\n }\n this.consumeChar('}')\n break\n }\n // throwing exceptions from \"ASSERT_EXISTS\" during backtracking\n // causes severe performance degradations\n if (isBacktracking === true && range === undefined) {\n return undefined\n }\n ASSERT_EXISTS(range)\n break\n }\n // throwing exceptions from \"ASSERT_EXISTS\" during backtracking\n // causes severe performance degradations\n if (isBacktracking === true && range === undefined) {\n return undefined\n }\n // istanbul ignore else\n if (ASSERT_EXISTS(range)) {\n if (this.peekChar(0) === '?') {\n this.consumeChar('?')\n range.greedy = false\n } else {\n range.greedy = true\n }\n range.type = 'Quantifier'\n range.loc = this.loc(begin)\n return range\n }\n }\n atom() {\n let atom\n const begin = this.idx\n switch (this.peekChar()) {\n case '.':\n atom = this.dotAll()\n break\n case '\\\\':\n atom = this.atomEscape()\n break\n case '[':\n atom = this.characterClass()\n break\n case '(':\n atom = this.group()\n break\n }\n if (atom === undefined && this.isPatternCharacter()) {\n atom = this.patternCharacter()\n }\n // istanbul ignore else\n if (ASSERT_EXISTS(atom)) {\n atom.loc = this.loc(begin)\n if (this.isQuantifier()) {\n atom.quantifier = this.quantifier()\n }\n return atom\n }\n }\n dotAll() {\n this.consumeChar('.')\n return {\n type: 'Set',\n complement: true,\n value: [cc('\\n'), cc('\\r'), cc('\\u2028'), cc('\\u2029')],\n }\n }\n atomEscape() {\n this.consumeChar('\\\\')\n switch (this.peekChar()) {\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9':\n return this.decimalEscapeAtom()\n case 'd':\n case 'D':\n case 's':\n case 'S':\n case 'w':\n case 'W':\n return this.characterClassEscape()\n case 'f':\n case 'n':\n case 'r':\n case 't':\n case 'v':\n return this.controlEscapeAtom()\n case 'c':\n return this.controlLetterEscapeAtom()\n case '0':\n return this.nulCharacterAtom()\n case 'x':\n return this.hexEscapeSequenceAtom()\n case 'u':\n return this.regExpUnicodeEscapeSequenceAtom()\n default:\n return this.identityEscapeAtom()\n }\n }\n decimalEscapeAtom() {\n const value = this.positiveInteger()\n return { type: 'GroupBackReference', value: value }\n }\n characterClassEscape() {\n let set\n let complement = false\n switch (this.popChar()) {\n case 'd':\n set = digitsCharCodes\n break\n case 'D':\n set = digitsCharCodes\n complement = true\n break\n case 's':\n set = whitespaceCodes\n break\n case 'S':\n set = whitespaceCodes\n complement = true\n break\n case 'w':\n set = wordCharCodes\n break\n case 'W':\n set = wordCharCodes\n complement = true\n break\n }\n // istanbul ignore else\n if (ASSERT_EXISTS(set)) {\n return { type: 'Set', value: set, complement: complement }\n }\n }\n controlEscapeAtom() {\n let escapeCode\n switch (this.popChar()) {\n case 'f':\n escapeCode = cc('\\f')\n break\n case 'n':\n escapeCode = cc('\\n')\n break\n case 'r':\n escapeCode = cc('\\r')\n break\n case 't':\n escapeCode = cc('\\t')\n break\n case 'v':\n escapeCode = cc('\\v')\n break\n }\n // istanbul ignore else\n if (ASSERT_EXISTS(escapeCode)) {\n return { type: 'Character', value: escapeCode }\n }\n }\n controlLetterEscapeAtom() {\n this.consumeChar('c')\n const letter = this.popChar()\n if (/[a-zA-Z]/.test(letter) === false) {\n throw Error('Invalid ')\n }\n const letterCode = letter.toUpperCase().charCodeAt(0) - 64\n return { type: 'Character', value: letterCode }\n }\n nulCharacterAtom() {\n // TODO implement '[lookahead ∉ DecimalDigit]'\n // TODO: for the deprecated octal escape sequence\n this.consumeChar('0')\n return { type: 'Character', value: cc('\\0') }\n }\n hexEscapeSequenceAtom() {\n this.consumeChar('x')\n return this.parseHexDigits(2)\n }\n regExpUnicodeEscapeSequenceAtom() {\n this.consumeChar('u')\n return this.parseHexDigits(4)\n }\n identityEscapeAtom() {\n // TODO: implement \"SourceCharacter but not UnicodeIDContinue\"\n // // http://unicode.org/reports/tr31/#Specific_Character_Adjustments\n const escapedChar = this.popChar()\n return { type: 'Character', value: cc(escapedChar) }\n }\n classPatternCharacterAtom() {\n switch (this.peekChar()) {\n // istanbul ignore next\n case '\\n':\n // istanbul ignore next\n case '\\r':\n // istanbul ignore next\n case '\\u2028':\n // istanbul ignore next\n case '\\u2029':\n // istanbul ignore next\n case '\\\\':\n // istanbul ignore next\n case ']':\n throw Error('TBD')\n default:\n const nextChar = this.popChar()\n return { type: 'Character', value: cc(nextChar) }\n }\n }\n characterClass() {\n const set = []\n let complement = false\n this.consumeChar('[')\n if (this.peekChar(0) === '^') {\n this.consumeChar('^')\n complement = true\n }\n while (this.isClassAtom()) {\n const from = this.classAtom()\n from.type === 'Character'\n if (isCharacter(from) && this.isRangeDash()) {\n this.consumeChar('-')\n const to = this.classAtom()\n to.type === 'Character'\n // a range can only be used when both sides are single characters\n if (isCharacter(to)) {\n if (to.value < from.value) {\n throw Error('Range out of order in character class')\n }\n set.push({ from: from.value, to: to.value })\n } else {\n // literal dash\n insertToSet(from.value, set)\n set.push(cc('-'))\n insertToSet(to.value, set)\n }\n } else {\n insertToSet(from.value, set)\n }\n }\n this.consumeChar(']')\n return { type: 'Set', complement: complement, value: set }\n }\n classAtom() {\n switch (this.peekChar()) {\n // istanbul ignore next\n case ']':\n // istanbul ignore next\n case '\\n':\n // istanbul ignore next\n case '\\r':\n // istanbul ignore next\n case '\\u2028':\n // istanbul ignore next\n case '\\u2029':\n throw Error('TBD')\n case '\\\\':\n return this.classEscape()\n default:\n return this.classPatternCharacterAtom()\n }\n }\n classEscape() {\n this.consumeChar('\\\\')\n switch (this.peekChar()) {\n // Matches a backspace.\n // (Not to be confused with \\b word boundary outside characterClass)\n case 'b':\n this.consumeChar('b')\n return { type: 'Character', value: cc('\\u0008') }\n case 'd':\n case 'D':\n case 's':\n case 'S':\n case 'w':\n case 'W':\n return this.characterClassEscape()\n case 'f':\n case 'n':\n case 'r':\n case 't':\n case 'v':\n return this.controlEscapeAtom()\n case 'c':\n return this.controlLetterEscapeAtom()\n case '0':\n return this.nulCharacterAtom()\n case 'x':\n return this.hexEscapeSequenceAtom()\n case 'u':\n return this.regExpUnicodeEscapeSequenceAtom()\n default:\n return this.identityEscapeAtom()\n }\n }\n group() {\n let capturing = true\n this.consumeChar('(')\n switch (this.peekChar(0)) {\n case '?':\n this.consumeChar('?')\n this.consumeChar(':')\n capturing = false\n break\n default:\n this.groupIdx++\n break\n }\n const value = this.disjunction()\n this.consumeChar(')')\n const groupAst = {\n type: 'Group',\n capturing: capturing,\n value: value,\n }\n if (capturing) {\n groupAst['idx'] = this.groupIdx\n }\n return groupAst\n }\n positiveInteger() {\n let number = this.popChar()\n // istanbul ignore next - can't ever get here due to previous lookahead checks\n // still implementing this error checking in case this ever changes.\n if (decimalPatternNoZero.test(number) === false) {\n throw Error('Expecting a positive integer')\n }\n while (decimalPattern.test(this.peekChar(0))) {\n number += this.popChar()\n }\n return parseInt(number, 10)\n }\n integerIncludingZero() {\n let number = this.popChar()\n if (decimalPattern.test(number) === false) {\n throw Error('Expecting an integer')\n }\n while (decimalPattern.test(this.peekChar(0))) {\n number += this.popChar()\n }\n return parseInt(number, 10)\n }\n patternCharacter() {\n const nextChar = this.popChar()\n switch (nextChar) {\n // istanbul ignore next\n case '\\n':\n // istanbul ignore next\n case '\\r':\n // istanbul ignore next\n case '\\u2028':\n // istanbul ignore next\n case '\\u2029':\n // istanbul ignore next\n case '^':\n // istanbul ignore next\n case '$':\n // istanbul ignore next\n case '\\\\':\n // istanbul ignore next\n case '.':\n // istanbul ignore next\n case '*':\n // istanbul ignore next\n case '+':\n // istanbul ignore next\n case '?':\n // istanbul ignore next\n case '(':\n // istanbul ignore next\n case ')':\n // istanbul ignore next\n case '[':\n // istanbul ignore next\n case '|':\n // istanbul ignore next\n throw Error('TBD')\n default:\n return { type: 'Character', value: cc(nextChar) }\n }\n }\n isRegExpFlag() {\n switch (this.peekChar(0)) {\n case 'g':\n case 'i':\n case 'm':\n case 'u':\n case 'y':\n return true\n default:\n return false\n }\n }\n isRangeDash() {\n return this.peekChar() === '-' && this.isClassAtom(1)\n }\n isDigit() {\n return decimalPattern.test(this.peekChar(0))\n }\n isClassAtom(howMuch = 0) {\n switch (this.peekChar(howMuch)) {\n case ']':\n case '\\n':\n case '\\r':\n case '\\u2028':\n case '\\u2029':\n return false\n default:\n return true\n }\n }\n isTerm() {\n return this.isAtom() || this.isAssertion()\n }\n isAtom() {\n if (this.isPatternCharacter()) {\n return true\n }\n switch (this.peekChar(0)) {\n case '.':\n case '\\\\': // atomEscape\n case '[': // characterClass\n // TODO: isAtom must be called before isAssertion - disambiguate\n case '(': // group\n return true\n default:\n return false\n }\n }\n isAssertion() {\n switch (this.peekChar(0)) {\n case '^':\n case '$':\n return true\n // '\\b' or '\\B'\n case '\\\\':\n switch (this.peekChar(1)) {\n case 'b':\n case 'B':\n return true\n default:\n return false\n }\n // '(?=' or '(?!'\n case '(':\n return this.peekChar(1) === '?' && (this.peekChar(2) === '=' || this.peekChar(2) === '!')\n default:\n return false\n }\n }\n isQuantifier() {\n const prevState = this.saveState()\n try {\n return this.quantifier(true) !== undefined\n } catch (e) {\n return false\n } finally {\n this.restoreState(prevState)\n }\n }\n isPatternCharacter() {\n switch (this.peekChar()) {\n case '^':\n case '$':\n case '\\\\':\n case '.':\n case '*':\n case '+':\n case '?':\n case '(':\n case ')':\n case '[':\n case '|':\n case '/':\n case '\\n':\n case '\\r':\n case '\\u2028':\n case '\\u2029':\n return false\n default:\n return true\n }\n }\n parseHexDigits(howMany) {\n let hexString = ''\n for (let i = 0; i < howMany; i++) {\n const hexChar = this.popChar()\n if (hexDigitPattern.test(hexChar) === false) {\n throw Error('Expecting a HexDecimal digits')\n }\n hexString += hexChar\n }\n const charCode = parseInt(hexString, 16)\n return { type: 'Character', value: charCode }\n }\n peekChar(howMuch = 0) {\n return this.input[this.idx + howMuch]\n }\n popChar() {\n const nextChar = this.peekChar(0)\n this.consumeChar(undefined)\n return nextChar\n }\n consumeChar(char) {\n if (char !== undefined && this.input[this.idx] !== char) {\n throw Error(\"Expected: '\" + char + \"' but found: '\" + this.input[this.idx] + \"' at offset: \" + this.idx)\n }\n if (this.idx >= this.input.length) {\n throw Error('Unexpected end of input')\n }\n this.idx++\n }\n loc(begin) {\n return { begin: begin, end: this.idx }\n }\n }\n\n class BaseRegExpVisitor {\n visitChildren(node) {\n for (const key in node) {\n const child = node[key]\n /* istanbul ignore else */\n if (node.hasOwnProperty(key)) {\n if (child.type !== undefined) {\n this.visit(child)\n } else if (Array.isArray(child)) {\n child.forEach((subChild) => {\n this.visit(subChild)\n }, this)\n }\n }\n }\n }\n visit(node) {\n switch (node.type) {\n case 'Pattern':\n this.visitPattern(node)\n break\n case 'Flags':\n this.visitFlags(node)\n break\n case 'Disjunction':\n this.visitDisjunction(node)\n break\n case 'Alternative':\n this.visitAlternative(node)\n break\n case 'StartAnchor':\n this.visitStartAnchor(node)\n break\n case 'EndAnchor':\n this.visitEndAnchor(node)\n break\n case 'WordBoundary':\n this.visitWordBoundary(node)\n break\n case 'NonWordBoundary':\n this.visitNonWordBoundary(node)\n break\n case 'Lookahead':\n this.visitLookahead(node)\n break\n case 'NegativeLookahead':\n this.visitNegativeLookahead(node)\n break\n case 'Character':\n this.visitCharacter(node)\n break\n case 'Set':\n this.visitSet(node)\n break\n case 'Group':\n this.visitGroup(node)\n break\n case 'GroupBackReference':\n this.visitGroupBackReference(node)\n break\n case 'Quantifier':\n this.visitQuantifier(node)\n break\n }\n this.visitChildren(node)\n }\n visitPattern(node) {}\n visitFlags(node) {}\n visitDisjunction(node) {}\n visitAlternative(node) {}\n // Assertion\n visitStartAnchor(node) {}\n visitEndAnchor(node) {}\n visitWordBoundary(node) {}\n visitNonWordBoundary(node) {}\n visitLookahead(node) {}\n visitNegativeLookahead(node) {}\n // atoms\n visitCharacter(node) {}\n visitSet(node) {}\n visitGroup(node) {}\n visitGroupBackReference(node) {}\n visitQuantifier(node) {}\n }\n\n let regExpAstCache = {}\n const regExpParser = new RegExpParser()\n function getRegExpAst(regExp) {\n const regExpStr = regExp.toString()\n if (regExpAstCache.hasOwnProperty(regExpStr)) {\n return regExpAstCache[regExpStr]\n } else {\n const regExpAst = regExpParser.pattern(regExpStr)\n regExpAstCache[regExpStr] = regExpAst\n return regExpAst\n }\n }\n function clearRegExpParserCache() {\n regExpAstCache = {}\n }\n\n const complementErrorMessage = 'Complement Sets are not supported for first char optimization'\n const failedOptimizationPrefixMsg = 'Unable to use \"first char\" lexer optimizations:\\n'\n function getOptimizedStartCodesIndices(regExp, ensureOptimizations = false) {\n try {\n const ast = getRegExpAst(regExp)\n const firstChars = firstCharOptimizedIndices(ast.value, {}, ast.flags.ignoreCase)\n return firstChars\n } catch (e) {\n /* istanbul ignore next */\n // Testing this relies on the regexp-to-ast library having a bug... */\n // TODO: only the else branch needs to be ignored, try to fix with newer prettier / tsc\n if (e.message === complementErrorMessage) {\n if (ensureOptimizations) {\n PRINT_WARNING(\n `${failedOptimizationPrefixMsg}` +\n `\\tUnable to optimize: < ${regExp.toString()} >\\n` +\n '\\tComplement Sets cannot be automatically optimized.\\n' +\n \"\\tThis will disable the lexer's first char optimizations.\\n\" +\n '\\tSee: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.',\n )\n }\n } else {\n let msgSuffix = ''\n if (ensureOptimizations) {\n msgSuffix =\n \"\\n\\tThis will disable the lexer's first char optimizations.\\n\" +\n '\\tSee: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.'\n }\n PRINT_ERROR(\n `${failedOptimizationPrefixMsg}\\n` +\n `\\tFailed parsing: < ${regExp.toString()} >\\n` +\n `\\tUsing the @chevrotain/regexp-to-ast library\\n` +\n '\\tPlease open an issue at: https://github.com/chevrotain/chevrotain/issues' +\n msgSuffix,\n )\n }\n }\n return []\n }\n function firstCharOptimizedIndices(ast, result, ignoreCase) {\n switch (ast.type) {\n case 'Disjunction':\n for (let i = 0; i < ast.value.length; i++) {\n firstCharOptimizedIndices(ast.value[i], result, ignoreCase)\n }\n break\n case 'Alternative':\n const terms = ast.value\n for (let i = 0; i < terms.length; i++) {\n const term = terms[i]\n // skip terms that cannot effect the first char results\n switch (term.type) {\n case 'EndAnchor':\n // A group back reference cannot affect potential starting char.\n // because if a back reference is the first production than automatically\n // the group being referenced has had to come BEFORE so its codes have already been added\n case 'GroupBackReference':\n // assertions do not affect potential starting codes\n case 'Lookahead':\n case 'NegativeLookahead':\n case 'StartAnchor':\n case 'WordBoundary':\n case 'NonWordBoundary':\n continue\n }\n const atom = term\n switch (atom.type) {\n case 'Character':\n addOptimizedIdxToResult(atom.value, result, ignoreCase)\n break\n case 'Set':\n if (atom.complement === true) {\n throw Error(complementErrorMessage)\n }\n forEach(atom.value, (code) => {\n if (typeof code === 'number') {\n addOptimizedIdxToResult(code, result, ignoreCase)\n } else {\n // range\n const range = code\n // cannot optimize when ignoreCase is\n if (ignoreCase === true) {\n for (let rangeCode = range.from; rangeCode <= range.to; rangeCode++) {\n addOptimizedIdxToResult(rangeCode, result, ignoreCase)\n }\n }\n // Optimization (2 orders of magnitude less work for very large ranges)\n else {\n // handle unoptimized values\n for (\n let rangeCode = range.from;\n rangeCode <= range.to && rangeCode < minOptimizationVal;\n rangeCode++\n ) {\n addOptimizedIdxToResult(rangeCode, result, ignoreCase)\n }\n // Less common charCode where we optimize for faster init time, by using larger \"buckets\"\n if (range.to >= minOptimizationVal) {\n const minUnOptVal = range.from >= minOptimizationVal ? range.from : minOptimizationVal\n const maxUnOptVal = range.to\n const minOptIdx = charCodeToOptimizedIndex(minUnOptVal)\n const maxOptIdx = charCodeToOptimizedIndex(maxUnOptVal)\n for (let currOptIdx = minOptIdx; currOptIdx <= maxOptIdx; currOptIdx++) {\n result[currOptIdx] = currOptIdx\n }\n }\n }\n }\n })\n break\n case 'Group':\n firstCharOptimizedIndices(atom.value, result, ignoreCase)\n break\n /* istanbul ignore next */\n default:\n throw Error('Non Exhaustive Match')\n }\n // reached a mandatory production, no more **start** codes can be found on this alternative\n const isOptionalQuantifier = atom.quantifier !== undefined && atom.quantifier.atLeast === 0\n if (\n // A group may be optional due to empty contents /(?:)/\n // or if everything inside it is optional /((a)?)/\n (atom.type === 'Group' && isWholeOptional(atom) === false) ||\n // If this term is not a group it may only be optional if it has an optional quantifier\n (atom.type !== 'Group' && isOptionalQuantifier === false)\n ) {\n break\n }\n }\n break\n /* istanbul ignore next */\n default:\n throw Error('non exhaustive match!')\n }\n // console.log(Object.keys(result).length)\n return values(result)\n }\n function addOptimizedIdxToResult(code, result, ignoreCase) {\n const optimizedCharIdx = charCodeToOptimizedIndex(code)\n result[optimizedCharIdx] = optimizedCharIdx\n if (ignoreCase === true) {\n handleIgnoreCase(code, result)\n }\n }\n function handleIgnoreCase(code, result) {\n const char = String.fromCharCode(code)\n const upperChar = char.toUpperCase()\n /* istanbul ignore else */\n if (upperChar !== char) {\n const optimizedCharIdx = charCodeToOptimizedIndex(upperChar.charCodeAt(0))\n result[optimizedCharIdx] = optimizedCharIdx\n } else {\n const lowerChar = char.toLowerCase()\n if (lowerChar !== char) {\n const optimizedCharIdx = charCodeToOptimizedIndex(lowerChar.charCodeAt(0))\n result[optimizedCharIdx] = optimizedCharIdx\n }\n }\n }\n function findCode(setNode, targetCharCodes) {\n return find$1(setNode.value, (codeOrRange) => {\n if (typeof codeOrRange === 'number') {\n return includes(targetCharCodes, codeOrRange)\n } else {\n // range\n const range = codeOrRange\n return find$1(targetCharCodes, (targetCode) => range.from <= targetCode && targetCode <= range.to) !== undefined\n }\n })\n }\n function isWholeOptional(ast) {\n const quantifier = ast.quantifier\n if (quantifier && quantifier.atLeast === 0) {\n return true\n }\n if (!ast.value) {\n return false\n }\n return isArray$1(ast.value) ? every(ast.value, isWholeOptional) : isWholeOptional(ast.value)\n }\n class CharCodeFinder extends BaseRegExpVisitor {\n constructor(targetCharCodes) {\n super()\n this.targetCharCodes = targetCharCodes\n this.found = false\n }\n visitChildren(node) {\n // No need to keep looking...\n if (this.found === true) {\n return\n }\n // switch lookaheads as they do not actually consume any characters thus\n // finding a charCode at lookahead context does not mean that regexp can actually contain it in a match.\n switch (node.type) {\n case 'Lookahead':\n this.visitLookahead(node)\n return\n case 'NegativeLookahead':\n this.visitNegativeLookahead(node)\n return\n }\n super.visitChildren(node)\n }\n visitCharacter(node) {\n if (includes(this.targetCharCodes, node.value)) {\n this.found = true\n }\n }\n visitSet(node) {\n if (node.complement) {\n if (findCode(node, this.targetCharCodes) === undefined) {\n this.found = true\n }\n } else {\n if (findCode(node, this.targetCharCodes) !== undefined) {\n this.found = true\n }\n }\n }\n }\n function canMatchCharCode(charCodes, pattern) {\n if (pattern instanceof RegExp) {\n const ast = getRegExpAst(pattern)\n const charCodeFinder = new CharCodeFinder(charCodes)\n charCodeFinder.visit(ast)\n return charCodeFinder.found\n } else {\n return (\n find$1(pattern, (char) => {\n return includes(charCodes, char.charCodeAt(0))\n }) !== undefined\n )\n }\n }\n\n const PATTERN = 'PATTERN'\n const DEFAULT_MODE = 'defaultMode'\n const MODES = 'modes'\n let SUPPORT_STICKY = typeof new RegExp('(?:)').sticky === 'boolean'\n function analyzeTokenTypes(tokenTypes, options) {\n options = defaults$1(options, {\n useSticky: SUPPORT_STICKY,\n debug: false,\n safeMode: false,\n positionTracking: 'full',\n lineTerminatorCharacters: ['\\r', '\\n'],\n tracer: (msg, action) => action(),\n })\n const tracer = options.tracer\n tracer('initCharCodeToOptimizedIndexMap', () => {\n initCharCodeToOptimizedIndexMap()\n })\n let onlyRelevantTypes\n tracer('Reject Lexer.NA', () => {\n onlyRelevantTypes = reject(tokenTypes, (currType) => {\n return currType[PATTERN] === Lexer.NA\n })\n })\n let hasCustom = false\n let allTransformedPatterns\n tracer('Transform Patterns', () => {\n hasCustom = false\n allTransformedPatterns = map(onlyRelevantTypes, (currType) => {\n const currPattern = currType[PATTERN]\n /* istanbul ignore else */\n if (isRegExp$1(currPattern)) {\n const regExpSource = currPattern.source\n if (\n regExpSource.length === 1 &&\n // only these regExp meta characters which can appear in a length one regExp\n regExpSource !== '^' &&\n regExpSource !== '$' &&\n regExpSource !== '.' &&\n !currPattern.ignoreCase\n ) {\n return regExpSource\n } else if (\n regExpSource.length === 2 &&\n regExpSource[0] === '\\\\' &&\n // not a meta character\n !includes(['d', 'D', 's', 'S', 't', 'r', 'n', 't', '0', 'c', 'b', 'B', 'f', 'v', 'w', 'W'], regExpSource[1])\n ) {\n // escaped meta Characters: /\\+/ /\\[/\n // or redundant escaping: /\\a/\n // without the escaping \"\\\"\n return regExpSource[1]\n } else {\n return options.useSticky ? addStickyFlag(currPattern) : addStartOfInput(currPattern)\n }\n } else if (isFunction(currPattern)) {\n hasCustom = true\n // CustomPatternMatcherFunc - custom patterns do not require any transformations, only wrapping in a RegExp Like object\n return { exec: currPattern }\n } else if (typeof currPattern === 'object') {\n hasCustom = true\n // ICustomPattern\n return currPattern\n } else if (typeof currPattern === 'string') {\n if (currPattern.length === 1) {\n return currPattern\n } else {\n const escapedRegExpString = currPattern.replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n const wrappedRegExp = new RegExp(escapedRegExpString)\n return options.useSticky ? addStickyFlag(wrappedRegExp) : addStartOfInput(wrappedRegExp)\n }\n } else {\n throw Error('non exhaustive match')\n }\n })\n })\n let patternIdxToType\n let patternIdxToGroup\n let patternIdxToLongerAltIdxArr\n let patternIdxToPushMode\n let patternIdxToPopMode\n tracer('misc mapping', () => {\n patternIdxToType = map(onlyRelevantTypes, (currType) => currType.tokenTypeIdx)\n patternIdxToGroup = map(onlyRelevantTypes, (clazz) => {\n const groupName = clazz.GROUP\n /* istanbul ignore next */\n if (groupName === Lexer.SKIPPED) {\n return undefined\n } else if (isString(groupName)) {\n return groupName\n } else if (isUndefined(groupName)) {\n return false\n } else {\n throw Error('non exhaustive match')\n }\n })\n patternIdxToLongerAltIdxArr = map(onlyRelevantTypes, (clazz) => {\n const longerAltType = clazz.LONGER_ALT\n if (longerAltType) {\n const longerAltIdxArr = isArray$1(longerAltType)\n ? map(longerAltType, (type) => indexOf(onlyRelevantTypes, type))\n : [indexOf(onlyRelevantTypes, longerAltType)]\n return longerAltIdxArr\n }\n })\n patternIdxToPushMode = map(onlyRelevantTypes, (clazz) => clazz.PUSH_MODE)\n patternIdxToPopMode = map(onlyRelevantTypes, (clazz) => has(clazz, 'POP_MODE'))\n })\n let patternIdxToCanLineTerminator\n tracer('Line Terminator Handling', () => {\n const lineTerminatorCharCodes = getCharCodes(options.lineTerminatorCharacters)\n patternIdxToCanLineTerminator = map(onlyRelevantTypes, (tokType) => false)\n if (options.positionTracking !== 'onlyOffset') {\n patternIdxToCanLineTerminator = map(onlyRelevantTypes, (tokType) => {\n if (has(tokType, 'LINE_BREAKS')) {\n return !!tokType.LINE_BREAKS\n } else {\n return (\n checkLineBreaksIssues(tokType, lineTerminatorCharCodes) === false &&\n canMatchCharCode(lineTerminatorCharCodes, tokType.PATTERN)\n )\n }\n })\n }\n })\n let patternIdxToIsCustom\n let patternIdxToShort\n let emptyGroups\n let patternIdxToConfig\n tracer('Misc Mapping #2', () => {\n patternIdxToIsCustom = map(onlyRelevantTypes, isCustomPattern)\n patternIdxToShort = map(allTransformedPatterns, isShortPattern)\n emptyGroups = reduce(\n onlyRelevantTypes,\n (acc, clazz) => {\n const groupName = clazz.GROUP\n if (isString(groupName) && !(groupName === Lexer.SKIPPED)) {\n acc[groupName] = []\n }\n return acc\n },\n {},\n )\n patternIdxToConfig = map(allTransformedPatterns, (x, idx) => {\n return {\n pattern: allTransformedPatterns[idx],\n longerAlt: patternIdxToLongerAltIdxArr[idx],\n canLineTerminator: patternIdxToCanLineTerminator[idx],\n isCustom: patternIdxToIsCustom[idx],\n short: patternIdxToShort[idx],\n group: patternIdxToGroup[idx],\n push: patternIdxToPushMode[idx],\n pop: patternIdxToPopMode[idx],\n tokenTypeIdx: patternIdxToType[idx],\n tokenType: onlyRelevantTypes[idx],\n }\n })\n })\n let canBeOptimized = true\n let charCodeToPatternIdxToConfig = []\n if (!options.safeMode) {\n tracer('First Char Optimization', () => {\n charCodeToPatternIdxToConfig = reduce(\n onlyRelevantTypes,\n (result, currTokType, idx) => {\n if (typeof currTokType.PATTERN === 'string') {\n const charCode = currTokType.PATTERN.charCodeAt(0)\n const optimizedIdx = charCodeToOptimizedIndex(charCode)\n addToMapOfArrays(result, optimizedIdx, patternIdxToConfig[idx])\n } else if (isArray$1(currTokType.START_CHARS_HINT)) {\n let lastOptimizedIdx\n forEach(currTokType.START_CHARS_HINT, (charOrInt) => {\n const charCode = typeof charOrInt === 'string' ? charOrInt.charCodeAt(0) : charOrInt\n const currOptimizedIdx = charCodeToOptimizedIndex(charCode)\n // Avoid adding the config multiple times\n /* istanbul ignore else */\n // - Difficult to check this scenario effects as it is only a performance\n // optimization that does not change correctness\n if (lastOptimizedIdx !== currOptimizedIdx) {\n lastOptimizedIdx = currOptimizedIdx\n addToMapOfArrays(result, currOptimizedIdx, patternIdxToConfig[idx])\n }\n })\n } else if (isRegExp$1(currTokType.PATTERN)) {\n if (currTokType.PATTERN.unicode) {\n canBeOptimized = false\n if (options.ensureOptimizations) {\n PRINT_ERROR(\n `${failedOptimizationPrefixMsg}` +\n `\\tUnable to analyze < ${currTokType.PATTERN.toString()} > pattern.\\n` +\n '\\tThe regexp unicode flag is not currently supported by the regexp-to-ast library.\\n' +\n \"\\tThis will disable the lexer's first char optimizations.\\n\" +\n '\\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE',\n )\n }\n } else {\n const optimizedCodes = getOptimizedStartCodesIndices(currTokType.PATTERN, options.ensureOptimizations)\n /* istanbul ignore if */\n // start code will only be empty given an empty regExp or failure of regexp-to-ast library\n // the first should be a different validation and the second cannot be tested.\n if (isEmpty(optimizedCodes)) {\n // we cannot understand what codes may start possible matches\n // The optimization correctness requires knowing start codes for ALL patterns.\n // Not actually sure this is an error, no debug message\n canBeOptimized = false\n }\n forEach(optimizedCodes, (code) => {\n addToMapOfArrays(result, code, patternIdxToConfig[idx])\n })\n }\n } else {\n if (options.ensureOptimizations) {\n PRINT_ERROR(\n `${failedOptimizationPrefixMsg}` +\n `\\tTokenType: <${currTokType.name}> is using a custom token pattern without providing <start_chars_hint> parameter.\\n` +\n \"\\tThis will disable the lexer's first char optimizations.\\n\" +\n '\\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE',\n )\n }\n canBeOptimized = false\n }\n return result\n },\n [],\n )\n })\n }\n return {\n emptyGroups: emptyGroups,\n patternIdxToConfig: patternIdxToConfig,\n charCodeToPatternIdxToConfig: charCodeToPatternIdxToConfig,\n hasCustom: hasCustom,\n canBeOptimized: canBeOptimized,\n }\n }\n function validatePatterns(tokenTypes, validModesNames) {\n let errors = []\n const missingResult = findMissingPatterns(tokenTypes)\n errors = errors.concat(missingResult.errors)\n const invalidResult = findInvalidPatterns(missingResult.valid)\n const validTokenTypes = invalidResult.valid\n errors = errors.concat(invalidResult.errors)\n errors = errors.concat(validateRegExpPattern(validTokenTypes))\n errors = errors.concat(findInvalidGroupType(validTokenTypes))\n errors = errors.concat(findModesThatDoNotExist(validTokenTypes, validModesNames))\n errors = errors.concat(findUnreachablePatterns(validTokenTypes))\n return errors\n }\n function validateRegExpPattern(tokenTypes) {\n let errors = []\n const withRegExpPatterns = filter(tokenTypes, (currTokType) => isRegExp$1(currTokType[PATTERN]))\n errors = errors.concat(findEndOfInputAnchor(withRegExpPatterns))\n errors = errors.concat(findStartOfInputAnchor(withRegExpPatterns))\n errors = errors.concat(findUnsupportedFlags(withRegExpPatterns))\n errors = errors.concat(findDuplicatePatterns(withRegExpPatterns))\n errors = errors.concat(findEmptyMatchRegExps(withRegExpPatterns))\n return errors\n }\n function findMissingPatterns(tokenTypes) {\n const tokenTypesWithMissingPattern = filter(tokenTypes, (currType) => {\n return !has(currType, PATTERN)\n })\n const errors = map(tokenTypesWithMissingPattern, (currType) => {\n return {\n message: 'Token Type: ->' + currType.name + \"<- missing static 'PATTERN' property\",\n type: LexerDefinitionErrorType.MISSING_PATTERN,\n tokenTypes: [currType],\n }\n })\n const valid = difference$1(tokenTypes, tokenTypesWithMissingPattern)\n return { errors, valid }\n }\n function findInvalidPatterns(tokenTypes) {\n const tokenTypesWithInvalidPattern = filter(tokenTypes, (currType) => {\n const pattern = currType[PATTERN]\n return !isRegExp$1(pattern) && !isFunction(pattern) && !has(pattern, 'exec') && !isString(pattern)\n })\n const errors = map(tokenTypesWithInvalidPattern, (currType) => {\n return {\n message:\n 'Token Type: ->' +\n currType.name +\n \"<- static 'PATTERN' can only be a RegExp, a\" +\n ' Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.',\n type: LexerDefinitionErrorType.INVALID_PATTERN,\n tokenTypes: [currType],\n }\n })\n const valid = difference$1(tokenTypes, tokenTypesWithInvalidPattern)\n return { errors, valid }\n }\n const end_of_input = /[^\\\\][$]/\n function findEndOfInputAnchor(tokenTypes) {\n class EndAnchorFinder extends BaseRegExpVisitor {\n constructor() {\n super(...arguments)\n this.found = false\n }\n visitEndAnchor(node) {\n this.found = true\n }\n }\n const invalidRegex = filter(tokenTypes, (currType) => {\n const pattern = currType.PATTERN\n try {\n const regexpAst = getRegExpAst(pattern)\n const endAnchorVisitor = new EndAnchorFinder()\n endAnchorVisitor.visit(regexpAst)\n return endAnchorVisitor.found\n } catch (e) {\n // old behavior in case of runtime exceptions with regexp-to-ast.\n /* istanbul ignore next - cannot ensure an error in regexp-to-ast*/\n return end_of_input.test(pattern.source)\n }\n })\n const errors = map(invalidRegex, (currType) => {\n return {\n message:\n 'Unexpected RegExp Anchor Error:\\n' +\n '\\tToken Type: ->' +\n currType.name +\n \"<- static 'PATTERN' cannot contain end of input anchor '$'\\n\" +\n '\\tSee chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS' +\n '\\tfor details.',\n type: LexerDefinitionErrorType.EOI_ANCHOR_FOUND,\n tokenTypes: [currType],\n }\n })\n return errors\n }\n function findEmptyMatchRegExps(tokenTypes) {\n const matchesEmptyString = filter(tokenTypes, (currType) => {\n const pattern = currType.PATTERN\n return pattern.test('')\n })\n const errors = map(matchesEmptyString, (currType) => {\n return {\n message: 'Token Type: ->' + currType.name + \"<- static 'PATTERN' must not match an empty string\",\n type: LexerDefinitionErrorType.EMPTY_MATCH_PATTERN,\n tokenTypes: [currType],\n }\n })\n return errors\n }\n const start_of_input = /[^\\\\[][\\^]|^\\^/\n function findStartOfInputAnchor(tokenTypes) {\n class StartAnchorFinder extends BaseRegExpVisitor {\n constructor() {\n super(...arguments)\n this.found = false\n }\n visitStartAnchor(node) {\n this.found = true\n }\n }\n const invalidRegex = filter(tokenTypes, (currType) => {\n const pattern = currType.PATTERN\n try {\n const regexpAst = getRegExpAst(pattern)\n const startAnchorVisitor = new StartAnchorFinder()\n startAnchorVisitor.visit(regexpAst)\n return startAnchorVisitor.found\n } catch (e) {\n // old behavior in case of runtime exceptions with regexp-to-ast.\n /* istanbul ignore next - cannot ensure an error in regexp-to-ast*/\n return start_of_input.test(pattern.source)\n }\n })\n const errors = map(invalidRegex, (currType) => {\n return {\n message:\n 'Unexpected RegExp Anchor Error:\\n' +\n '\\tToken Type: ->' +\n currType.name +\n \"<- static 'PATTERN' cannot contain start of input anchor '^'\\n\" +\n '\\tSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS' +\n '\\tfor details.',\n type: LexerDefinitionErrorType.SOI_ANCHOR_FOUND,\n tokenTypes: [currType],\n }\n })\n return errors\n }\n function findUnsupportedFlags(tokenTypes) {\n const invalidFlags = filter(tokenTypes, (currType) => {\n const pattern = currType[PATTERN]\n return pattern instanceof RegExp && (pattern.multiline || pattern.global)\n })\n const errors = map(invalidFlags, (currType) => {\n return {\n message: 'Token Type: ->' + currType.name + \"<- static 'PATTERN' may NOT contain global('g') or multiline('m')\",\n type: LexerDefinitionErrorType.UNSUPPORTED_FLAGS_FOUND,\n tokenTypes: [currType],\n }\n })\n return errors\n }\n // This can only test for identical duplicate RegExps, not semantically equivalent ones.\n function findDuplicatePatterns(tokenTypes) {\n const found = []\n let identicalPatterns = map(tokenTypes, (outerType) => {\n return reduce(\n tokenTypes,\n (result, innerType) => {\n if (\n outerType.PATTERN.source === innerType.PATTERN.source &&\n !includes(found, innerType) &&\n innerType.PATTERN !== Lexer.NA\n ) {\n // this avoids duplicates in the result, each Token Type may only appear in one \"set\"\n // in essence we are creating Equivalence classes on equality relation.\n found.push(innerType)\n result.push(innerType)\n return result\n }\n return result\n },\n [],\n )\n })\n identicalPatterns = compact(identicalPatterns)\n const duplicatePatterns = filter(identicalPatterns, (currIdenticalSet) => {\n return currIdenticalSet.length > 1\n })\n const errors = map(duplicatePatterns, (setOfIdentical) => {\n const tokenTypeNames = map(setOfIdentical, (currType) => {\n return currType.name\n })\n const dupPatternSrc = head(setOfIdentical).PATTERN\n return {\n message:\n `The same RegExp pattern ->${dupPatternSrc}<-` +\n `has been used in all of the following Token Types: ${tokenTypeNames.join(', ')} <-`,\n type: LexerDefinitionErrorType.DUPLICATE_PATTERNS_FOUND,\n tokenTypes: setOfIdentical,\n }\n })\n return errors\n }\n function findInvalidGroupType(tokenTypes) {\n const invalidTypes = filter(tokenTypes, (clazz) => {\n if (!has(clazz, 'GROUP')) {\n return false\n }\n const group = clazz.GROUP\n return group !== Lexer.SKIPPED && group !== Lexer.NA && !isString(group)\n })\n const errors = map(invalidTypes, (currType) => {\n return {\n message: 'Token Type: ->' + currType.name + \"<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String\",\n type: LexerDefinitionErrorType.INVALID_GROUP_TYPE_FOUND,\n tokenTypes: [currType],\n }\n })\n return errors\n }\n function findModesThatDoNotExist(tokenTypes, validModes) {\n const invalidModes = filter(tokenTypes, (clazz) => {\n return clazz.PUSH_MODE !== undefined && !includes(validModes, clazz.PUSH_MODE)\n })\n const errors = map(invalidModes, (tokType) => {\n const msg =\n `Token Type: ->${tokType.name}<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->${tokType.PUSH_MODE}<-` +\n `which does not exist`\n return {\n message: msg,\n type: LexerDefinitionErrorType.PUSH_MODE_DOES_NOT_EXIST,\n tokenTypes: [tokType],\n }\n })\n return errors\n }\n function findUnreachablePatterns(tokenTypes) {\n const errors = []\n const canBeTested = reduce(\n tokenTypes,\n (result, tokType, idx) => {\n const pattern = tokType.PATTERN\n if (pattern === Lexer.NA) {\n return result\n }\n // a more comprehensive validation for all forms of regExps would require\n // deeper regExp analysis capabilities\n if (isString(pattern)) {\n result.push({ str: pattern, idx, tokenType: tokType })\n } else if (isRegExp$1(pattern) && noMetaChar(pattern)) {\n result.push({ str: pattern.source, idx, tokenType: tokType })\n }\n return result\n },\n [],\n )\n forEach(tokenTypes, (tokType, testIdx) => {\n forEach(canBeTested, ({ str, idx, tokenType }) => {\n if (testIdx < idx && testTokenType(str, tokType.PATTERN)) {\n const msg =\n `Token: ->${tokenType.name}<- can never be matched.\\n` +\n `Because it appears AFTER the Token Type ->${tokType.name}<-` +\n `in the lexer's definition.\\n` +\n `See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`\n errors.push({\n message: msg,\n type: LexerDefinitionErrorType.UNREACHABLE_PATTERN,\n tokenTypes: [tokType, tokenType],\n })\n }\n })\n })\n return errors\n }\n function testTokenType(str, pattern) {\n /* istanbul ignore else */\n if (isRegExp$1(pattern)) {\n const regExpArray = pattern.exec(str)\n return regExpArray !== null && regExpArray.index === 0\n } else if (isFunction(pattern)) {\n // maintain the API of custom patterns\n return pattern(str, 0, [], {})\n } else if (has(pattern, 'exec')) {\n // maintain the API of custom patterns\n return pattern.exec(str, 0, [], {})\n } else if (typeof pattern === 'string') {\n return pattern === str\n } else {\n throw Error('non exhaustive match')\n }\n }\n function noMetaChar(regExp) {\n //https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n const metaChars = ['.', '\\\\', '[', ']', '|', '^', '$', '(', ')', '?', '*', '+', '{']\n return find$1(metaChars, (char) => regExp.source.indexOf(char) !== -1) === undefined\n }\n function addStartOfInput(pattern) {\n const flags = pattern.ignoreCase ? 'i' : ''\n // always wrapping in a none capturing group preceded by '^' to make sure matching can only work on start of input.\n // duplicate/redundant start of input markers have no meaning (/^^^^A/ === /^A/)\n return new RegExp(`^(?:${pattern.source})`, flags)\n }\n function addStickyFlag(pattern) {\n const flags = pattern.ignoreCase ? 'iy' : 'y'\n // always wrapping in a none capturing group preceded by '^' to make sure matching can only work on start of input.\n // duplicate/redundant start of input markers have no meaning (/^^^^A/ === /^A/)\n return new RegExp(`${pattern.source}`, flags)\n }\n function performRuntimeChecks(lexerDefinition, trackLines, lineTerminatorCharacters) {\n const errors = []\n // some run time checks to help the end users.\n if (!has(lexerDefinition, DEFAULT_MODE)) {\n errors.push({\n message:\n 'A MultiMode Lexer cannot be initialized without a <' + DEFAULT_MODE + '> property in its definition\\n',\n type: LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE,\n })\n }\n if (!has(lexerDefinition, MODES)) {\n errors.push({\n message: 'A MultiMode Lexer cannot be initialized without a <' + MODES + '> property in its definition\\n',\n type: LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY,\n })\n }\n if (\n has(lexerDefinition, MODES) &&\n has(lexerDefinition, DEFAULT_MODE) &&\n !has(lexerDefinition.modes, lexerDefinition.defaultMode)\n ) {\n errors.push({\n message:\n `A MultiMode Lexer cannot be initialized with a ${DEFAULT_MODE}: <${lexerDefinition.defaultMode}>` +\n `which does not exist\\n`,\n type: LexerDefinitionErrorType.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST,\n })\n }\n if (has(lexerDefinition, MODES)) {\n forEach(lexerDefinition.modes, (currModeValue, currModeName) => {\n forEach(currModeValue, (currTokType, currIdx) => {\n if (isUndefined(currTokType)) {\n errors.push({\n message:\n `A Lexer cannot be initialized using an undefined Token Type. Mode:` +\n `<${currModeName}> at index: <${currIdx}>\\n`,\n type: LexerDefinitionErrorType.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED,\n })\n } else if (has(currTokType, 'LONGER_ALT')) {\n const longerAlt = isArray$1(currTokType.LONGER_ALT) ? currTokType.LONGER_ALT : [currTokType.LONGER_ALT]\n forEach(longerAlt, (currLongerAlt) => {\n if (!isUndefined(currLongerAlt) && !includes(currModeValue, currLongerAlt)) {\n errors.push({\n message: `A MultiMode Lexer cannot be initialized with a longer_alt <${currLongerAlt.name}> on token <${currTokType.name}> outside of mode <${currModeName}>\\n`,\n type: LexerDefinitionErrorType.MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE,\n })\n }\n })\n }\n })\n })\n }\n return errors\n }\n function performWarningRuntimeChecks(lexerDefinition, trackLines, lineTerminatorCharacters) {\n const warnings = []\n let hasAnyLineBreak = false\n const allTokenTypes = compact(flatten(values(lexerDefinition.modes)))\n const concreteTokenTypes = reject(allTokenTypes, (currType) => currType[PATTERN] === Lexer.NA)\n const terminatorCharCodes = getCharCodes(lineTerminatorCharacters)\n if (trackLines) {\n forEach(concreteTokenTypes, (tokType) => {\n const currIssue = checkLineBreaksIssues(tokType, terminatorCharCodes)\n if (currIssue !== false) {\n const message = buildLineBreakIssueMessage(tokType, currIssue)\n const warningDescriptor = {\n message,\n type: currIssue.issue,\n tokenType: tokType,\n }\n warnings.push(warningDescriptor)\n } else {\n // we don't want to attempt to scan if the user explicitly specified the line_breaks option.\n if (has(tokType, 'LINE_BREAKS')) {\n if (tokType.LINE_BREAKS === true) {\n hasAnyLineBreak = true\n }\n } else {\n if (canMatchCharCode(terminatorCharCodes, tokType.PATTERN)) {\n hasAnyLineBreak = true\n }\n }\n }\n })\n }\n if (trackLines && !hasAnyLineBreak) {\n warnings.push({\n message:\n 'Warning: No LINE_BREAKS Found.\\n' +\n '\\tThis Lexer has been defined to track line and column information,\\n' +\n '\\tBut none of the Token Types can be identified as matching a line terminator.\\n' +\n '\\tSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#LINE_BREAKS \\n' +\n '\\tfor details.',\n type: LexerDefinitionErrorType.NO_LINE_BREAKS_FLAGS,\n })\n }\n return warnings\n }\n function cloneEmptyGroups(emptyGroups) {\n const clonedResult = {}\n const groupKeys = keys(emptyGroups)\n forEach(groupKeys, (currKey) => {\n const currGroupValue = emptyGroups[currKey]\n /* istanbul ignore else */\n if (isArray$1(currGroupValue)) {\n clonedResult[currKey] = []\n } else {\n throw Error('non exhaustive match')\n }\n })\n return clonedResult\n }\n // TODO: refactor to avoid duplication\n function isCustomPattern(tokenType) {\n const pattern = tokenType.PATTERN\n /* istanbul ignore else */\n if (isRegExp$1(pattern)) {\n return false\n } else if (isFunction(pattern)) {\n // CustomPatternMatcherFunc - custom patterns do not require any transformations, only wrapping in a RegExp Like object\n return true\n } else if (has(pattern, 'exec')) {\n // ICustomPattern\n return true\n } else if (isString(pattern)) {\n return false\n } else {\n throw Error('non exhaustive match')\n }\n }\n function isShortPattern(pattern) {\n if (isString(pattern) && pattern.length === 1) {\n return pattern.charCodeAt(0)\n } else {\n return false\n }\n }\n /**\n * Faster than using a RegExp for default newline detection during lexing.\n */\n const LineTerminatorOptimizedTester = {\n // implements /\\n|\\r\\n?/g.test\n test: function (text) {\n const len = text.length\n for (let i = this.lastIndex; i < len; i++) {\n const c = text.charCodeAt(i)\n if (c === 10) {\n this.lastIndex = i + 1\n return true\n } else if (c === 13) {\n if (text.charCodeAt(i + 1) === 10) {\n this.lastIndex = i + 2\n } else {\n this.lastIndex = i + 1\n }\n return true\n }\n }\n return false\n },\n lastIndex: 0,\n }\n function checkLineBreaksIssues(tokType, lineTerminatorCharCodes) {\n if (has(tokType, 'LINE_BREAKS')) {\n // if the user explicitly declared the line_breaks option we will respect their choice\n // and assume it is correct.\n return false\n } else {\n /* istanbul ignore else */\n if (isRegExp$1(tokType.PATTERN)) {\n try {\n // TODO: why is the casting suddenly needed?\n canMatchCharCode(lineTerminatorCharCodes, tokType.PATTERN)\n } catch (e) {\n /* istanbul ignore next - to test this we would have to mock <canMatchCharCode> to throw an error */\n return {\n issue: LexerDefinitionErrorType.IDENTIFY_TERMINATOR,\n errMsg: e.message,\n }\n }\n return false\n } else if (isString(tokType.PATTERN)) {\n // string literal patterns can always be analyzed to detect line terminator usage\n return false\n } else if (isCustomPattern(tokType)) {\n // custom token types\n return { issue: LexerDefinitionErrorType.CUSTOM_LINE_BREAK }\n } else {\n throw Error('non exhaustive match')\n }\n }\n }\n function buildLineBreakIssueMessage(tokType, details) {\n /* istanbul ignore else */\n if (details.issue === LexerDefinitionErrorType.IDENTIFY_TERMINATOR) {\n return (\n 'Warning: unable to identify line terminator usage in pattern.\\n' +\n `\\tThe problem is in the <${tokType.name}> Token Type\\n` +\n `\\t Root cause: ${details.errMsg}.\\n` +\n '\\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR'\n )\n } else if (details.issue === LexerDefinitionErrorType.CUSTOM_LINE_BREAK) {\n return (\n 'Warning: A Custom Token Pattern should specify the <line_breaks> option.\\n' +\n `\\tThe problem is in the <${tokType.name}> Token Type\\n` +\n '\\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK'\n )\n } else {\n throw Error('non exhaustive match')\n }\n }\n function getCharCodes(charsOrCodes) {\n const charCodes = map(charsOrCodes, (numOrString) => {\n if (isString(numOrString)) {\n return numOrString.charCodeAt(0)\n } else {\n return numOrString\n }\n })\n return charCodes\n }\n function addToMapOfArrays(map, key, value) {\n if (map[key] === undefined) {\n map[key] = [value]\n } else {\n map[key].push(value)\n }\n }\n const minOptimizationVal = 256\n /**\n * We are mapping charCode above ASCI (256) into buckets each in the size of 256.\n * This is because ASCI are the most common start chars so each one of those will get its own\n * possible token configs vector.\n *\n * Tokens starting with charCodes \"above\" ASCI are uncommon, so we can \"afford\"\n * to place these into buckets of possible token configs, What we gain from\n * this is avoiding the case of creating an optimization 'charCodeToPatternIdxToConfig'\n * which would contain 10,000+ arrays of small size (e.g unicode Identifiers scenario).\n * Our 'charCodeToPatternIdxToConfig' max size will now be:\n * 256 + (2^16 / 2^8) - 1 === 511\n *\n * note the hack for fast division integer part extraction\n * See: https://stackoverflow.com/a/4228528\n */\n let charCodeToOptimizedIdxMap = []\n function charCodeToOptimizedIndex(charCode) {\n return charCode < minOptimizationVal ? charCode : charCodeToOptimizedIdxMap[charCode]\n }\n /**\n * This is a compromise between cold start / hot running performance\n * Creating this array takes ~3ms on a modern machine,\n * But if we perform the computation at runtime as needed the CSS Lexer benchmark\n * performance degrades by ~10%\n *\n * TODO: Perhaps it should be lazy initialized only if a charCode > 255 is used.\n */\n function initCharCodeToOptimizedIndexMap() {\n if (isEmpty(charCodeToOptimizedIdxMap)) {\n charCodeToOptimizedIdxMap = new Array(65536)\n for (let i = 0; i < 65536; i++) {\n charCodeToOptimizedIdxMap[i] = i > 255 ? 255 + ~~(i / 255) : i\n }\n }\n }\n\n function tokenStructuredMatcher(tokInstance, tokConstructor) {\n const instanceType = tokInstance.tokenTypeIdx\n if (instanceType === tokConstructor.tokenTypeIdx) {\n return true\n } else {\n return tokConstructor.isParent === true && tokConstructor.categoryMatchesMap[instanceType] === true\n }\n }\n // Optimized tokenMatcher in case our grammar does not use token categories\n // Being so tiny it is much more likely to be in-lined and this avoid the function call overhead\n function tokenStructuredMatcherNoCategories(token, tokType) {\n return token.tokenTypeIdx === tokType.tokenTypeIdx\n }\n let tokenShortNameIdx = 1\n const tokenIdxToClass = {}\n function augmentTokenTypes(tokenTypes) {\n // collect the parent Token Types as well.\n const tokenTypesAndParents = expandCategories(tokenTypes)\n // add required tokenType and categoryMatches properties\n assignTokenDefaultProps(tokenTypesAndParents)\n // fill up the categoryMatches\n assignCategoriesMapProp(tokenTypesAndParents)\n assignCategoriesTokensProp(tokenTypesAndParents)\n forEach(tokenTypesAndParents, (tokType) => {\n tokType.isParent = tokType.categoryMatches.length > 0\n })\n }\n function expandCategories(tokenTypes) {\n let result = clone(tokenTypes)\n let categories = tokenTypes\n let searching = true\n while (searching) {\n categories = compact(flatten(map(categories, (currTokType) => currTokType.CATEGORIES)))\n const newCategories = difference$1(categories, result)\n result = result.concat(newCategories)\n if (isEmpty(newCategories)) {\n searching = false\n } else {\n categories = newCategories\n }\n }\n return result\n }\n function assignTokenDefaultProps(tokenTypes) {\n forEach(tokenTypes, (currTokType) => {\n if (!hasShortKeyProperty(currTokType)) {\n tokenIdxToClass[tokenShortNameIdx] = currTokType\n currTokType.tokenTypeIdx = tokenShortNameIdx++\n }\n // CATEGORIES? : TokenType | TokenType[]\n if (\n hasCategoriesProperty(currTokType) &&\n !isArray$1(currTokType.CATEGORIES)\n // &&\n // !isUndefined(currTokType.CATEGORIES.PATTERN)\n ) {\n currTokType.CATEGORIES = [currTokType.CATEGORIES]\n }\n if (!hasCategoriesProperty(currTokType)) {\n currTokType.CATEGORIES = []\n }\n if (!hasExtendingTokensTypesProperty(currTokType)) {\n currTokType.categoryMatches = []\n }\n if (!hasExtendingTokensTypesMapProperty(currTokType)) {\n currTokType.categoryMatchesMap = {}\n }\n })\n }\n function assignCategoriesTokensProp(tokenTypes) {\n forEach(tokenTypes, (currTokType) => {\n // avoid duplications\n currTokType.categoryMatches = []\n forEach(currTokType.categoryMatchesMap, (val, key) => {\n currTokType.categoryMatches.push(tokenIdxToClass[key].tokenTypeIdx)\n })\n })\n }\n function assignCategoriesMapProp(tokenTypes) {\n forEach(tokenTypes, (currTokType) => {\n singleAssignCategoriesToksMap([], currTokType)\n })\n }\n function singleAssignCategoriesToksMap(path, nextNode) {\n forEach(path, (pathNode) => {\n nextNode.categoryMatchesMap[pathNode.tokenTypeIdx] = true\n })\n forEach(nextNode.CATEGORIES, (nextCategory) => {\n const newPath = path.concat(nextNode)\n // avoids infinite loops due to cyclic categories.\n if (!includes(newPath, nextCategory)) {\n singleAssignCategoriesToksMap(newPath, nextCategory)\n }\n })\n }\n function hasShortKeyProperty(tokType) {\n return has(tokType, 'tokenTypeIdx')\n }\n function hasCategoriesProperty(tokType) {\n return has(tokType, 'CATEGORIES')\n }\n function hasExtendingTokensTypesProperty(tokType) {\n return has(tokType, 'categoryMatches')\n }\n function hasExtendingTokensTypesMapProperty(tokType) {\n return has(tokType, 'categoryMatchesMap')\n }\n function isTokenType(tokType) {\n return has(tokType, 'tokenTypeIdx')\n }\n\n const defaultLexerErrorProvider = {\n buildUnableToPopLexerModeMessage(token) {\n return `Unable to pop Lexer Mode after encountering Token ->${token.image}<- The Mode Stack is empty`\n },\n buildUnexpectedCharactersMessage(fullText, startOffset, length, line, column) {\n return (\n `unexpected character: ->${fullText.charAt(startOffset)}<- at offset: ${startOffset},` +\n ` skipped ${length} characters.`\n )\n },\n }\n\n var LexerDefinitionErrorType\n ;(function (LexerDefinitionErrorType) {\n LexerDefinitionErrorType[(LexerDefinitionErrorType['MISSING_PATTERN'] = 0)] = 'MISSING_PATTERN'\n LexerDefinitionErrorType[(LexerDefinitionErrorType['INVALID_PATTERN'] = 1)] = 'INVALID_PATTERN'\n LexerDefinitionErrorType[(LexerDefinitionErrorType['EOI_ANCHOR_FOUND'] = 2)] = 'EOI_ANCHOR_FOUND'\n LexerDefinitionErrorType[(LexerDefinitionErrorType['UNSUPPORTED_FLAGS_FOUND'] = 3)] = 'UNSUPPORTED_FLAGS_FOUND'\n LexerDefinitionErrorType[(LexerDefinitionErrorType['DUPLICATE_PATTERNS_FOUND'] = 4)] = 'DUPLICATE_PATTERNS_FOUND'\n LexerDefinitionErrorType[(LexerDefinitionErrorType['INVALID_GROUP_TYPE_FOUND'] = 5)] = 'INVALID_GROUP_TYPE_FOUND'\n LexerDefinitionErrorType[(LexerDefinitionErrorType['PUSH_MODE_DOES_NOT_EXIST'] = 6)] = 'PUSH_MODE_DOES_NOT_EXIST'\n LexerDefinitionErrorType[(LexerDefinitionErrorType['MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE'] = 7)] =\n 'MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE'\n LexerDefinitionErrorType[(LexerDefinitionErrorType['MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY'] = 8)] =\n 'MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY'\n LexerDefinitionErrorType[(LexerDefinitionErrorType['MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST'] = 9)] =\n 'MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST'\n LexerDefinitionErrorType[(LexerDefinitionErrorType['LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED'] = 10)] =\n 'LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED'\n LexerDefinitionErrorType[(LexerDefinitionErrorType['SOI_ANCHOR_FOUND'] = 11)] = 'SOI_ANCHOR_FOUND'\n LexerDefinitionErrorType[(LexerDefinitionErrorType['EMPTY_MATCH_PATTERN'] = 12)] = 'EMPTY_MATCH_PATTERN'\n LexerDefinitionErrorType[(LexerDefinitionErrorType['NO_LINE_BREAKS_FLAGS'] = 13)] = 'NO_LINE_BREAKS_FLAGS'\n LexerDefinitionErrorType[(LexerDefinitionErrorType['UNREACHABLE_PATTERN'] = 14)] = 'UNREACHABLE_PATTERN'\n LexerDefinitionErrorType[(LexerDefinitionErrorType['IDENTIFY_TERMINATOR'] = 15)] = 'IDENTIFY_TERMINATOR'\n LexerDefinitionErrorType[(LexerDefinitionErrorType['CUSTOM_LINE_BREAK'] = 16)] = 'CUSTOM_LINE_BREAK'\n LexerDefinitionErrorType[(LexerDefinitionErrorType['MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE'] = 17)] =\n 'MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE'\n })(LexerDefinitionErrorType || (LexerDefinitionErrorType = {}))\n const DEFAULT_LEXER_CONFIG = {\n deferDefinitionErrorsHandling: false,\n positionTracking: 'full',\n lineTerminatorsPattern: /\\n|\\r\\n?/g,\n lineTerminatorCharacters: ['\\n', '\\r'],\n ensureOptimizations: false,\n safeMode: false,\n errorMessageProvider: defaultLexerErrorProvider,\n traceInitPerf: false,\n skipValidations: false,\n recoveryEnabled: true,\n }\n Object.freeze(DEFAULT_LEXER_CONFIG)\n class Lexer {\n constructor(lexerDefinition, config = DEFAULT_LEXER_CONFIG) {\n this.lexerDefinition = lexerDefinition\n this.lexerDefinitionErrors = []\n this.lexerDefinitionWarning = []\n this.patternIdxToConfig = {}\n this.charCodeToPatternIdxToConfig = {}\n this.modes = []\n this.emptyGroups = {}\n this.trackStartLines = true\n this.trackEndLines = true\n this.hasCustom = false\n this.canModeBeOptimized = {}\n // Duplicated from the parser's perf trace trait to allow future extraction\n // of the lexer to a separate package.\n this.TRACE_INIT = (phaseDesc, phaseImpl) => {\n // No need to optimize this using NOOP pattern because\n // It is not called in a hot spot...\n if (this.traceInitPerf === true) {\n this.traceInitIndent++\n const indent = new Array(this.traceInitIndent + 1).join('\\t')\n if (this.traceInitIndent < this.traceInitMaxIdent) {\n console.log(`${indent}--> <${phaseDesc}>`)\n }\n const { time, value } = timer(phaseImpl)\n /* istanbul ignore next - Difficult to reproduce specific performance behavior (>10ms) in tests */\n const traceMethod = time > 10 ? console.warn : console.log\n if (this.traceInitIndent < this.traceInitMaxIdent) {\n traceMethod(`${indent}<-- <${phaseDesc}> time: ${time}ms`)\n }\n this.traceInitIndent--\n return value\n } else {\n return phaseImpl()\n }\n }\n if (typeof config === 'boolean') {\n throw Error(\n 'The second argument to the Lexer constructor is now an ILexerConfig Object.\\n' +\n 'a boolean 2nd argument is no longer supported',\n )\n }\n // todo: defaults func?\n this.config = assign$1({}, DEFAULT_LEXER_CONFIG, config)\n const traceInitVal = this.config.traceInitPerf\n if (traceInitVal === true) {\n this.traceInitMaxIdent = Infinity\n this.traceInitPerf = true\n } else if (typeof traceInitVal === 'number') {\n this.traceInitMaxIdent = traceInitVal\n this.traceInitPerf = true\n }\n this.traceInitIndent = -1\n this.TRACE_INIT('Lexer Constructor', () => {\n let actualDefinition\n let hasOnlySingleMode = true\n this.TRACE_INIT('Lexer Config handling', () => {\n if (this.config.lineTerminatorsPattern === DEFAULT_LEXER_CONFIG.lineTerminatorsPattern) {\n // optimized built-in implementation for the defaults definition of lineTerminators\n this.config.lineTerminatorsPattern = LineTerminatorOptimizedTester\n } else {\n if (this.config.lineTerminatorCharacters === DEFAULT_LEXER_CONFIG.lineTerminatorCharacters) {\n throw Error(\n 'Error: Missing <lineTerminatorCharacters> property on the Lexer config.\\n' +\n '\\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS',\n )\n }\n }\n if (config.safeMode && config.ensureOptimizations) {\n throw Error('\"safeMode\" and \"ensureOptimizations\" flags are mutually exclusive.')\n }\n this.trackStartLines = /full|onlyStart/i.test(this.config.positionTracking)\n this.trackEndLines = /full/i.test(this.config.positionTracking)\n // Convert SingleModeLexerDefinition into a IMultiModeLexerDefinition.\n if (isArray$1(lexerDefinition)) {\n actualDefinition = {\n modes: { defaultMode: clone(lexerDefinition) },\n defaultMode: DEFAULT_MODE,\n }\n } else {\n // no conversion needed, input should already be a IMultiModeLexerDefinition\n hasOnlySingleMode = false\n actualDefinition = clone(lexerDefinition)\n }\n })\n if (this.config.skipValidations === false) {\n this.TRACE_INIT('performRuntimeChecks', () => {\n this.lexerDefinitionErrors = this.lexerDefinitionErrors.concat(\n performRuntimeChecks(actualDefinition, this.trackStartLines, this.config.lineTerminatorCharacters),\n )\n })\n this.TRACE_INIT('performWarningRuntimeChecks', () => {\n this.lexerDefinitionWarning = this.lexerDefinitionWarning.concat(\n performWarningRuntimeChecks(actualDefinition, this.trackStartLines, this.config.lineTerminatorCharacters),\n )\n })\n }\n // for extra robustness to avoid throwing an none informative error message\n actualDefinition.modes = actualDefinition.modes ? actualDefinition.modes : {}\n // an error of undefined TokenTypes will be detected in \"performRuntimeChecks\" above.\n // this transformation is to increase robustness in the case of partially invalid lexer definition.\n forEach(actualDefinition.modes, (currModeValue, currModeName) => {\n actualDefinition.modes[currModeName] = reject(currModeValue, (currTokType) => isUndefined(currTokType))\n })\n const allModeNames = keys(actualDefinition.modes)\n forEach(actualDefinition.modes, (currModDef, currModName) => {\n this.TRACE_INIT(`Mode: <${currModName}> processing`, () => {\n this.modes.push(currModName)\n if (this.config.skipValidations === false) {\n this.TRACE_INIT(`validatePatterns`, () => {\n this.lexerDefinitionErrors = this.lexerDefinitionErrors.concat(\n validatePatterns(currModDef, allModeNames),\n )\n })\n }\n // If definition errors were encountered, the analysis phase may fail unexpectedly/\n // Considering a lexer with definition errors may never be used, there is no point\n // to performing the analysis anyhow...\n if (isEmpty(this.lexerDefinitionErrors)) {\n augmentTokenTypes(currModDef)\n let currAnalyzeResult\n this.TRACE_INIT(`analyzeTokenTypes`, () => {\n currAnalyzeResult = analyzeTokenTypes(currModDef, {\n lineTerminatorCharacters: this.config.lineTerminatorCharacters,\n positionTracking: config.positionTracking,\n ensureOptimizations: config.ensureOptimizations,\n safeMode: config.safeMode,\n tracer: this.TRACE_INIT,\n })\n })\n this.patternIdxToConfig[currModName] = currAnalyzeResult.patternIdxToConfig\n this.charCodeToPatternIdxToConfig[currModName] = currAnalyzeResult.charCodeToPatternIdxToConfig\n this.emptyGroups = assign$1({}, this.emptyGroups, currAnalyzeResult.emptyGroups)\n this.hasCustom = currAnalyzeResult.hasCustom || this.hasCustom\n this.canModeBeOptimized[currModName] = currAnalyzeResult.canBeOptimized\n }\n })\n })\n this.defaultMode = actualDefinition.defaultMode\n if (!isEmpty(this.lexerDefinitionErrors) && !this.config.deferDefinitionErrorsHandling) {\n const allErrMessages = map(this.lexerDefinitionErrors, (error) => {\n return error.message\n })\n const allErrMessagesString = allErrMessages.join('-----------------------\\n')\n throw new Error('Errors detected in definition of Lexer:\\n' + allErrMessagesString)\n }\n // Only print warning if there are no errors, This will avoid pl\n forEach(this.lexerDefinitionWarning, (warningDescriptor) => {\n PRINT_WARNING(warningDescriptor.message)\n })\n this.TRACE_INIT('Choosing sub-methods implementations', () => {\n // Choose the relevant internal implementations for this specific parser.\n // These implementations should be in-lined by the JavaScript engine\n // to provide optimal performance in each scenario.\n if (SUPPORT_STICKY) {\n this.chopInput = identity\n this.match = this.matchWithTest\n } else {\n this.updateLastIndex = noop\n this.match = this.matchWithExec\n }\n if (hasOnlySingleMode) {\n this.handleModes = noop\n }\n if (this.trackStartLines === false) {\n this.computeNewColumn = identity\n }\n if (this.trackEndLines === false) {\n this.updateTokenEndLineColumnLocation = noop\n }\n if (/full/i.test(this.config.positionTracking)) {\n this.createTokenInstance = this.createFullToken\n } else if (/onlyStart/i.test(this.config.positionTracking)) {\n this.createTokenInstance = this.createStartOnlyToken\n } else if (/onlyOffset/i.test(this.config.positionTracking)) {\n this.createTokenInstance = this.createOffsetOnlyToken\n } else {\n throw Error(`Invalid <positionTracking> config option: \"${this.config.positionTracking}\"`)\n }\n if (this.hasCustom) {\n this.addToken = this.addTokenUsingPush\n this.handlePayload = this.handlePayloadWithCustom\n } else {\n this.addToken = this.addTokenUsingMemberAccess\n this.handlePayload = this.handlePayloadNoCustom\n }\n })\n this.TRACE_INIT('Failed Optimization Warnings', () => {\n const unOptimizedModes = reduce(\n this.canModeBeOptimized,\n (cannotBeOptimized, canBeOptimized, modeName) => {\n if (canBeOptimized === false) {\n cannotBeOptimized.push(modeName)\n }\n return cannotBeOptimized\n },\n [],\n )\n if (config.ensureOptimizations && !isEmpty(unOptimizedModes)) {\n throw Error(\n `Lexer Modes: < ${unOptimizedModes.join(', ')} > cannot be optimized.\\n` +\n '\\t Disable the \"ensureOptimizations\" lexer config flag to silently ignore this and run the lexer in an un-optimized mode.\\n' +\n '\\t Or inspect the console log for details on how to resolve these issues.',\n )\n }\n })\n this.TRACE_INIT('clearRegExpParserCache', () => {\n clearRegExpParserCache()\n })\n this.TRACE_INIT('toFastProperties', () => {\n toFastProperties(this)\n })\n })\n }\n tokenize(text, initialMode = this.defaultMode) {\n if (!isEmpty(this.lexerDefinitionErrors)) {\n const allErrMessages = map(this.lexerDefinitionErrors, (error) => {\n return error.message\n })\n const allErrMessagesString = allErrMessages.join('-----------------------\\n')\n throw new Error('Unable to Tokenize because Errors detected in definition of Lexer:\\n' + allErrMessagesString)\n }\n return this.tokenizeInternal(text, initialMode)\n }\n // There is quite a bit of duplication between this and \"tokenizeInternalLazy\"\n // This is intentional due to performance considerations.\n // this method also used quite a bit of `!` none null assertions because it is too optimized\n // for `tsc` to always understand it is \"safe\"\n tokenizeInternal(text, initialMode) {\n let i,\n j,\n k,\n matchAltImage,\n longerAlt,\n matchedImage,\n payload,\n altPayload,\n imageLength,\n group,\n tokType,\n newToken,\n errLength,\n msg,\n match\n const orgText = text\n const orgLength = orgText.length\n let offset = 0\n let matchedTokensIndex = 0\n // initializing the tokensArray to the \"guessed\" size.\n // guessing too little will still reduce the number of array re-sizes on pushes.\n // guessing too large (Tested by guessing x4 too large) may cost a bit more of memory\n // but would still have a faster runtime by avoiding (All but one) array resizing.\n const guessedNumberOfTokens = this.hasCustom\n ? 0 // will break custom token pattern APIs the matchedTokens array will contain undefined elements.\n : Math.floor(text.length / 10)\n const matchedTokens = new Array(guessedNumberOfTokens)\n const errors = []\n let line = this.trackStartLines ? 1 : undefined\n let column = this.trackStartLines ? 1 : undefined\n const groups = cloneEmptyGroups(this.emptyGroups)\n const trackLines = this.trackStartLines\n const lineTerminatorPattern = this.config.lineTerminatorsPattern\n let currModePatternsLength = 0\n let patternIdxToConfig = []\n let currCharCodeToPatternIdxToConfig = []\n const modeStack = []\n const emptyArray = []\n Object.freeze(emptyArray)\n let getPossiblePatterns\n function getPossiblePatternsSlow() {\n return patternIdxToConfig\n }\n function getPossiblePatternsOptimized(charCode) {\n const optimizedCharIdx = charCodeToOptimizedIndex(charCode)\n const possiblePatterns = currCharCodeToPatternIdxToConfig[optimizedCharIdx]\n if (possiblePatterns === undefined) {\n return emptyArray\n } else {\n return possiblePatterns\n }\n }\n const pop_mode = (popToken) => {\n // TODO: perhaps avoid this error in the edge case there is no more input?\n if (\n modeStack.length === 1 &&\n // if we have both a POP_MODE and a PUSH_MODE this is in-fact a \"transition\"\n // So no error should occur.\n popToken.tokenType.PUSH_MODE === undefined\n ) {\n // if we try to pop the last mode there lexer will no longer have ANY mode.\n // thus the pop is ignored, an error will be created and the lexer will continue parsing in the previous mode.\n const msg = this.config.errorMessageProvider.buildUnableToPopLexerModeMessage(popToken)\n errors.push({\n offset: popToken.startOffset,\n line: popToken.startLine,\n column: popToken.startColumn,\n length: popToken.image.length,\n message: msg,\n })\n } else {\n modeStack.pop()\n const newMode = last(modeStack)\n patternIdxToConfig = this.patternIdxToConfig[newMode]\n currCharCodeToPatternIdxToConfig = this.charCodeToPatternIdxToConfig[newMode]\n currModePatternsLength = patternIdxToConfig.length\n const modeCanBeOptimized = this.canModeBeOptimized[newMode] && this.config.safeMode === false\n if (currCharCodeToPatternIdxToConfig && modeCanBeOptimized) {\n getPossiblePatterns = getPossiblePatternsOptimized\n } else {\n getPossiblePatterns = getPossiblePatternsSlow\n }\n }\n }\n function push_mode(newMode) {\n modeStack.push(newMode)\n currCharCodeToPatternIdxToConfig = this.charCodeToPatternIdxToConfig[newMode]\n patternIdxToConfig = this.patternIdxToConfig[newMode]\n currModePatternsLength = patternIdxToConfig.length\n currModePatternsLength = patternIdxToConfig.length\n const modeCanBeOptimized = this.canModeBeOptimized[newMode] && this.config.safeMode === false\n if (currCharCodeToPatternIdxToConfig && modeCanBeOptimized) {\n getPossiblePatterns = getPossiblePatternsOptimized\n } else {\n getPossiblePatterns = getPossiblePatternsSlow\n }\n }\n // this pattern seems to avoid a V8 de-optimization, although that de-optimization does not\n // seem to matter performance wise.\n push_mode.call(this, initialMode)\n let currConfig\n const recoveryEnabled = this.config.recoveryEnabled\n while (offset < orgLength) {\n matchedImage = null\n const nextCharCode = orgText.charCodeAt(offset)\n const chosenPatternIdxToConfig = getPossiblePatterns(nextCharCode)\n const chosenPatternsLength = chosenPatternIdxToConfig.length\n for (i = 0; i < chosenPatternsLength; i++) {\n currConfig = chosenPatternIdxToConfig[i]\n const currPattern = currConfig.pattern\n payload = null\n // manually in-lined because > 600 chars won't be in-lined in V8\n const singleCharCode = currConfig.short\n if (singleCharCode !== false) {\n if (nextCharCode === singleCharCode) {\n // single character string\n matchedImage = currPattern\n }\n } else if (currConfig.isCustom === true) {\n match = currPattern.exec(orgText, offset, matchedTokens, groups)\n if (match !== null) {\n matchedImage = match[0]\n if (match.payload !== undefined) {\n payload = match.payload\n }\n } else {\n matchedImage = null\n }\n } else {\n this.updateLastIndex(currPattern, offset)\n matchedImage = this.match(currPattern, text, offset)\n }\n if (matchedImage !== null) {\n // even though this pattern matched we must try a another longer alternative.\n // this can be used to prioritize keywords over identifiers\n longerAlt = currConfig.longerAlt\n if (longerAlt !== undefined) {\n // TODO: micro optimize, avoid extra prop access\n // by saving/linking longerAlt on the original config?\n const longerAltLength = longerAlt.length\n for (k = 0; k < longerAltLength; k++) {\n const longerAltConfig = patternIdxToConfig[longerAlt[k]]\n const longerAltPattern = longerAltConfig.pattern\n altPayload = null\n // single Char can never be a longer alt so no need to test it.\n // manually in-lined because > 600 chars won't be in-lined in V8\n if (longerAltConfig.isCustom === true) {\n match = longerAltPattern.exec(orgText, offset, matchedTokens, groups)\n if (match !== null) {\n matchAltImage = match[0]\n if (match.payload !== undefined) {\n altPayload = match.payload\n }\n } else {\n matchAltImage = null\n }\n } else {\n this.updateLastIndex(longerAltPattern, offset)\n matchAltImage = this.match(longerAltPattern, text, offset)\n }\n if (matchAltImage && matchAltImage.length > matchedImage.length) {\n matchedImage = matchAltImage\n payload = altPayload\n currConfig = longerAltConfig\n // Exit the loop early after matching one of the longer alternatives\n // The first matched alternative takes precedence\n break\n }\n }\n }\n break\n }\n }\n // successful match\n if (matchedImage !== null) {\n imageLength = matchedImage.length\n group = currConfig.group\n if (group !== undefined) {\n tokType = currConfig.tokenTypeIdx\n // TODO: \"offset + imageLength\" and the new column may be computed twice in case of \"full\" location information inside\n // createFullToken method\n newToken = this.createTokenInstance(\n matchedImage,\n offset,\n tokType,\n currConfig.tokenType,\n line,\n column,\n imageLength,\n )\n this.handlePayload(newToken, payload)\n // TODO: optimize NOOP in case there are no special groups?\n if (group === false) {\n matchedTokensIndex = this.addToken(matchedTokens, matchedTokensIndex, newToken)\n } else {\n groups[group].push(newToken)\n }\n }\n text = this.chopInput(text, imageLength)\n offset = offset + imageLength\n // TODO: with newlines the column may be assigned twice\n column = this.computeNewColumn(column, imageLength)\n if (trackLines === true && currConfig.canLineTerminator === true) {\n let numOfLTsInMatch = 0\n let foundTerminator\n let lastLTEndOffset\n lineTerminatorPattern.lastIndex = 0\n do {\n foundTerminator = lineTerminatorPattern.test(matchedImage)\n if (foundTerminator === true) {\n lastLTEndOffset = lineTerminatorPattern.lastIndex - 1\n numOfLTsInMatch++\n }\n } while (foundTerminator === true)\n if (numOfLTsInMatch !== 0) {\n line = line + numOfLTsInMatch\n column = imageLength - lastLTEndOffset\n this.updateTokenEndLineColumnLocation(\n newToken,\n group,\n lastLTEndOffset,\n numOfLTsInMatch,\n line,\n column,\n imageLength,\n )\n }\n }\n // will be NOOP if no modes present\n this.handleModes(currConfig, pop_mode, push_mode, newToken)\n } else {\n // error recovery, drop characters until we identify a valid token's start point\n const errorStartOffset = offset\n const errorLine = line\n const errorColumn = column\n let foundResyncPoint = recoveryEnabled === false\n while (foundResyncPoint === false && offset < orgLength) {\n // Identity Func (when sticky flag is enabled)\n text = this.chopInput(text, 1)\n offset++\n for (j = 0; j < currModePatternsLength; j++) {\n const currConfig = patternIdxToConfig[j]\n const currPattern = currConfig.pattern\n // manually in-lined because > 600 chars won't be in-lined in V8\n const singleCharCode = currConfig.short\n if (singleCharCode !== false) {\n if (orgText.charCodeAt(offset) === singleCharCode) {\n // single character string\n foundResyncPoint = true\n }\n } else if (currConfig.isCustom === true) {\n foundResyncPoint = currPattern.exec(orgText, offset, matchedTokens, groups) !== null\n } else {\n this.updateLastIndex(currPattern, offset)\n foundResyncPoint = currPattern.exec(text) !== null\n }\n if (foundResyncPoint === true) {\n break\n }\n }\n }\n errLength = offset - errorStartOffset\n column = this.computeNewColumn(column, errLength)\n // at this point we either re-synced or reached the end of the input text\n msg = this.config.errorMessageProvider.buildUnexpectedCharactersMessage(\n orgText,\n errorStartOffset,\n errLength,\n errorLine,\n errorColumn,\n )\n errors.push({\n offset: errorStartOffset,\n line: errorLine,\n column: errorColumn,\n length: errLength,\n message: msg,\n })\n if (recoveryEnabled === false) {\n break\n }\n }\n }\n // if we do have custom patterns which push directly into the\n // TODO: custom tokens should not push directly??\n if (!this.hasCustom) {\n // if we guessed a too large size for the tokens array this will shrink it to the right size.\n matchedTokens.length = matchedTokensIndex\n }\n return {\n tokens: matchedTokens,\n groups: groups,\n errors: errors,\n }\n }\n handleModes(config, pop_mode, push_mode, newToken) {\n if (config.pop === true) {\n // need to save the PUSH_MODE property as if the mode is popped\n // patternIdxToPopMode is updated to reflect the new mode after popping the stack\n const pushMode = config.push\n pop_mode(newToken)\n if (pushMode !== undefined) {\n push_mode.call(this, pushMode)\n }\n } else if (config.push !== undefined) {\n push_mode.call(this, config.push)\n }\n }\n chopInput(text, length) {\n return text.substring(length)\n }\n updateLastIndex(regExp, newLastIndex) {\n regExp.lastIndex = newLastIndex\n }\n // TODO: decrease this under 600 characters? inspect stripping comments option in TSC compiler\n updateTokenEndLineColumnLocation(newToken, group, lastLTIdx, numOfLTsInMatch, line, column, imageLength) {\n let lastCharIsLT, fixForEndingInLT\n if (group !== undefined) {\n // a none skipped multi line Token, need to update endLine/endColumn\n lastCharIsLT = lastLTIdx === imageLength - 1\n fixForEndingInLT = lastCharIsLT ? -1 : 0\n if (!(numOfLTsInMatch === 1 && lastCharIsLT === true)) {\n // if a token ends in a LT that last LT only affects the line numbering of following Tokens\n newToken.endLine = line + fixForEndingInLT\n // the last LT in a token does not affect the endColumn either as the [columnStart ... columnEnd)\n // inclusive to exclusive range.\n newToken.endColumn = column - 1 + -fixForEndingInLT\n }\n // else single LT in the last character of a token, no need to modify the endLine/EndColumn\n }\n }\n computeNewColumn(oldColumn, imageLength) {\n return oldColumn + imageLength\n }\n createOffsetOnlyToken(image, startOffset, tokenTypeIdx, tokenType) {\n return {\n image,\n startOffset,\n tokenTypeIdx,\n tokenType,\n }\n }\n createStartOnlyToken(image, startOffset, tokenTypeIdx, tokenType, startLine, startColumn) {\n return {\n image,\n startOffset,\n startLine,\n startColumn,\n tokenTypeIdx,\n tokenType,\n }\n }\n createFullToken(image, startOffset, tokenTypeIdx, tokenType, startLine, startColumn, imageLength) {\n return {\n image,\n startOffset,\n endOffset: startOffset + imageLength - 1,\n startLine,\n endLine: startLine,\n startColumn,\n endColumn: startColumn + imageLength - 1,\n tokenTypeIdx,\n tokenType,\n }\n }\n addTokenUsingPush(tokenVector, index, tokenToAdd) {\n tokenVector.push(tokenToAdd)\n return index\n }\n addTokenUsingMemberAccess(tokenVector, index, tokenToAdd) {\n tokenVector[index] = tokenToAdd\n index++\n return index\n }\n handlePayloadNoCustom(token, payload) {}\n handlePayloadWithCustom(token, payload) {\n if (payload !== null) {\n token.payload = payload\n }\n }\n matchWithTest(pattern, text, offset) {\n const found = pattern.test(text)\n if (found === true) {\n return text.substring(offset, pattern.lastIndex)\n }\n return null\n }\n matchWithExec(pattern, text) {\n const regExpArray = pattern.exec(text)\n return regExpArray !== null ? regExpArray[0] : null\n }\n }\n Lexer.SKIPPED =\n 'This marks a skipped Token pattern, this means each token identified by it will' +\n 'be consumed and then thrown into oblivion, this can be used to for example to completely ignore whitespace.'\n Lexer.NA = /NOT_APPLICABLE/\n\n function tokenLabel(tokType) {\n if (hasTokenLabel(tokType)) {\n return tokType.LABEL\n } else {\n return tokType.name\n }\n }\n function hasTokenLabel(obj) {\n return isString(obj.LABEL) && obj.LABEL !== ''\n }\n const PARENT = 'parent'\n const CATEGORIES = 'categories'\n const LABEL = 'label'\n const GROUP = 'group'\n const PUSH_MODE = 'push_mode'\n const POP_MODE = 'pop_mode'\n const LONGER_ALT = 'longer_alt'\n const LINE_BREAKS = 'line_breaks'\n const START_CHARS_HINT = 'start_chars_hint'\n function createToken(config) {\n return createTokenInternal(config)\n }\n function createTokenInternal(config) {\n const pattern = config.pattern\n const tokenType = {}\n tokenType.name = config.name\n if (!isUndefined(pattern)) {\n tokenType.PATTERN = pattern\n }\n if (has(config, PARENT)) {\n throw (\n 'The parent property is no longer supported.\\n' +\n 'See: https://github.com/chevrotain/chevrotain/issues/564#issuecomment-349062346 for details.'\n )\n }\n if (has(config, CATEGORIES)) {\n // casting to ANY as this will be fixed inside `augmentTokenTypes``\n tokenType.CATEGORIES = config[CATEGORIES]\n }\n augmentTokenTypes([tokenType])\n if (has(config, LABEL)) {\n tokenType.LABEL = config[LABEL]\n }\n if (has(config, GROUP)) {\n tokenType.GROUP = config[GROUP]\n }\n if (has(config, POP_MODE)) {\n tokenType.POP_MODE = config[POP_MODE]\n }\n if (has(config, PUSH_MODE)) {\n tokenType.PUSH_MODE = config[PUSH_MODE]\n }\n if (has(config, LONGER_ALT)) {\n tokenType.LONGER_ALT = config[LONGER_ALT]\n }\n if (has(config, LINE_BREAKS)) {\n tokenType.LINE_BREAKS = config[LINE_BREAKS]\n }\n if (has(config, START_CHARS_HINT)) {\n tokenType.START_CHARS_HINT = config[START_CHARS_HINT]\n }\n return tokenType\n }\n const EOF = createToken({ name: 'EOF', pattern: Lexer.NA })\n augmentTokenTypes([EOF])\n function createTokenInstance(tokType, image, startOffset, endOffset, startLine, endLine, startColumn, endColumn) {\n return {\n image,\n startOffset,\n endOffset,\n startLine,\n endLine,\n startColumn,\n endColumn,\n tokenTypeIdx: tokType.tokenTypeIdx,\n tokenType: tokType,\n }\n }\n function tokenMatcher(token, tokType) {\n return tokenStructuredMatcher(token, tokType)\n }\n\n const defaultParserErrorProvider = {\n buildMismatchTokenMessage({ expected, actual, previous, ruleName }) {\n const hasLabel = hasTokenLabel(expected)\n const expectedMsg = hasLabel ? `--> ${tokenLabel(expected)} <--` : `token of type --> ${expected.name} <--`\n const msg = `Expecting ${expectedMsg} but found --> '${actual.image}' <--`\n return msg\n },\n buildNotAllInputParsedMessage({ firstRedundant, ruleName }) {\n return 'Redundant input, expecting EOF but found: ' + firstRedundant.image\n },\n buildNoViableAltMessage({ expectedPathsPerAlt, actual, previous, customUserDescription, ruleName }) {\n const errPrefix = 'Expecting: '\n // TODO: issue: No Viable Alternative Error may have incomplete details. #502\n const actualText = head(actual).image\n const errSuffix = \"\\nbut found: '\" + actualText + \"'\"\n if (customUserDescription) {\n return errPrefix + customUserDescription + errSuffix\n } else {\n const allLookAheadPaths = reduce(expectedPathsPerAlt, (result, currAltPaths) => result.concat(currAltPaths), [])\n const nextValidTokenSequences = map(\n allLookAheadPaths,\n (currPath) => `[${map(currPath, (currTokenType) => tokenLabel(currTokenType)).join(', ')}]`,\n )\n const nextValidSequenceItems = map(nextValidTokenSequences, (itemMsg, idx) => ` ${idx + 1}. ${itemMsg}`)\n const calculatedDescription = `one of these possible Token sequences:\\n${nextValidSequenceItems.join('\\n')}`\n return errPrefix + calculatedDescription + errSuffix\n }\n },\n buildEarlyExitMessage({ expectedIterationPaths, actual, customUserDescription, ruleName }) {\n const errPrefix = 'Expecting: '\n // TODO: issue: No Viable Alternative Error may have incomplete details. #502\n const actualText = head(actual).image\n const errSuffix = \"\\nbut found: '\" + actualText + \"'\"\n if (customUserDescription) {\n return errPrefix + customUserDescription + errSuffix\n } else {\n const nextValidTokenSequences = map(\n expectedIterationPaths,\n (currPath) => `[${map(currPath, (currTokenType) => tokenLabel(currTokenType)).join(',')}]`,\n )\n const calculatedDescription =\n `expecting at least one iteration which starts with one of these possible Token sequences::\\n ` +\n `<${nextValidTokenSequences.join(' ,')}>`\n return errPrefix + calculatedDescription + errSuffix\n }\n },\n }\n Object.freeze(defaultParserErrorProvider)\n const defaultGrammarResolverErrorProvider = {\n buildRuleNotFoundError(topLevelRule, undefinedRule) {\n const msg =\n 'Invalid grammar, reference to a rule which is not defined: ->' +\n undefinedRule.nonTerminalName +\n '<-\\n' +\n 'inside top level rule: ->' +\n topLevelRule.name +\n '<-'\n return msg\n },\n }\n const defaultGrammarValidatorErrorProvider = {\n buildDuplicateFoundError(topLevelRule, duplicateProds) {\n function getExtraProductionArgument(prod) {\n if (prod instanceof Terminal) {\n return prod.terminalType.name\n } else if (prod instanceof NonTerminal) {\n return prod.nonTerminalName\n } else {\n return ''\n }\n }\n const topLevelName = topLevelRule.name\n const duplicateProd = head(duplicateProds)\n const index = duplicateProd.idx\n const dslName = getProductionDslName(duplicateProd)\n const extraArgument = getExtraProductionArgument(duplicateProd)\n const hasExplicitIndex = index > 0\n let msg = `->${dslName}${hasExplicitIndex ? index : ''}<- ${\n extraArgument ? `with argument: ->${extraArgument}<-` : ''\n }\n appears more than once (${\n duplicateProds.length\n } times) in the top level rule: ->${topLevelName}<-. \n For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES \n `\n // white space trimming time! better to trim afterwards as it allows to use WELL formatted multi line template strings...\n msg = msg.replace(/[ \\t]+/g, ' ')\n msg = msg.replace(/\\s\\s+/g, '\\n')\n return msg\n },\n buildNamespaceConflictError(rule) {\n const errMsg =\n `Namespace conflict found in grammar.\\n` +\n `The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <${rule.name}>.\\n` +\n `To resolve this make sure each Terminal and Non-Terminal names are unique\\n` +\n `This is easy to accomplish by using the convention that Terminal names start with an uppercase letter\\n` +\n `and Non-Terminal names start with a lower case letter.`\n return errMsg\n },\n buildAlternationPrefixAmbiguityError(options) {\n const pathMsg = map(options.prefixPath, (currTok) => tokenLabel(currTok)).join(', ')\n const occurrence = options.alternation.idx === 0 ? '' : options.alternation.idx\n const errMsg =\n `Ambiguous alternatives: <${options.ambiguityIndices.join(' ,')}> due to common lookahead prefix\\n` +\n `in <OR${occurrence}> inside <${options.topLevelRule.name}> Rule,\\n` +\n `<${pathMsg}> may appears as a prefix path in all these alternatives.\\n` +\n `See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX\\n` +\n `For Further details.`\n return errMsg\n },\n buildAlternationAmbiguityError(options) {\n const pathMsg = map(options.prefixPath, (currtok) => tokenLabel(currtok)).join(', ')\n const occurrence = options.alternation.idx === 0 ? '' : options.alternation.idx\n let currMessage =\n `Ambiguous Alternatives Detected: <${options.ambiguityIndices.join(' ,')}> in <OR${occurrence}>` +\n ` inside <${options.topLevelRule.name}> Rule,\\n` +\n `<${pathMsg}> may appears as a prefix path in all these alternatives.\\n`\n currMessage =\n currMessage +\n `See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES\\n` +\n `For Further details.`\n return currMessage\n },\n buildEmptyRepetitionError(options) {\n let dslName = getProductionDslName(options.repetition)\n if (options.repetition.idx !== 0) {\n dslName += options.repetition.idx\n }\n const errMsg =\n `The repetition <${dslName}> within Rule <${options.topLevelRule.name}> can never consume any tokens.\\n` +\n `This could lead to an infinite loop.`\n return errMsg\n },\n // TODO: remove - `errors_public` from nyc.config.js exclude\n // once this method is fully removed from this file\n buildTokenNameError(options) {\n /* istanbul ignore next */\n return 'deprecated'\n },\n buildEmptyAlternationError(options) {\n const errMsg =\n `Ambiguous empty alternative: <${options.emptyChoiceIdx + 1}>` +\n ` in <OR${options.alternation.idx}> inside <${options.topLevelRule.name}> Rule.\\n` +\n `Only the last alternative may be an empty alternative.`\n return errMsg\n },\n buildTooManyAlternativesError(options) {\n const errMsg =\n `An Alternation cannot have more than 256 alternatives:\\n` +\n `<OR${options.alternation.idx}> inside <${options.topLevelRule.name}> Rule.\\n has ${\n options.alternation.definition.length + 1\n } alternatives.`\n return errMsg\n },\n buildLeftRecursionError(options) {\n const ruleName = options.topLevelRule.name\n const pathNames = map(options.leftRecursionPath, (currRule) => currRule.name)\n const leftRecursivePath = `${ruleName} --> ${pathNames.concat([ruleName]).join(' --> ')}`\n const errMsg =\n `Left Recursion found in grammar.\\n` +\n `rule: <${ruleName}> can be invoked from itself (directly or indirectly)\\n` +\n `without consuming any Tokens. The grammar path that causes this is: \\n ${leftRecursivePath}\\n` +\n ` To fix this refactor your grammar to remove the left recursion.\\n` +\n `see: https://en.wikipedia.org/wiki/LL_parser#Left_factoring.`\n return errMsg\n },\n // TODO: remove - `errors_public` from nyc.config.js exclude\n // once this method is fully removed from this file\n buildInvalidRuleNameError(options) {\n /* istanbul ignore next */\n return 'deprecated'\n },\n buildDuplicateRuleNameError(options) {\n let ruleName\n if (options.topLevelRule instanceof Rule) {\n ruleName = options.topLevelRule.name\n } else {\n ruleName = options.topLevelRule\n }\n const errMsg = `Duplicate definition, rule: ->${ruleName}<- is already defined in the grammar: ->${options.grammarName}<-`\n return errMsg\n },\n }\n\n function resolveGrammar$1(topLevels, errMsgProvider) {\n const refResolver = new GastRefResolverVisitor(topLevels, errMsgProvider)\n refResolver.resolveRefs()\n return refResolver.errors\n }\n class GastRefResolverVisitor extends GAstVisitor {\n constructor(nameToTopRule, errMsgProvider) {\n super()\n this.nameToTopRule = nameToTopRule\n this.errMsgProvider = errMsgProvider\n this.errors = []\n }\n resolveRefs() {\n forEach(values(this.nameToTopRule), (prod) => {\n this.currTopLevel = prod\n prod.accept(this)\n })\n }\n visitNonTerminal(node) {\n const ref = this.nameToTopRule[node.nonTerminalName]\n if (!ref) {\n const msg = this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel, node)\n this.errors.push({\n message: msg,\n type: ParserDefinitionErrorType.UNRESOLVED_SUBRULE_REF,\n ruleName: this.currTopLevel.name,\n unresolvedRefName: node.nonTerminalName,\n })\n } else {\n node.referencedRule = ref\n }\n }\n }\n\n class AbstractNextPossibleTokensWalker extends RestWalker {\n constructor(topProd, path) {\n super()\n this.topProd = topProd\n this.path = path\n this.possibleTokTypes = []\n this.nextProductionName = ''\n this.nextProductionOccurrence = 0\n this.found = false\n this.isAtEndOfPath = false\n }\n startWalking() {\n this.found = false\n if (this.path.ruleStack[0] !== this.topProd.name) {\n throw Error(\"The path does not start with the walker's top Rule!\")\n }\n // immutable for the win\n this.ruleStack = clone(this.path.ruleStack).reverse() // intelij bug requires assertion\n this.occurrenceStack = clone(this.path.occurrenceStack).reverse() // intelij bug requires assertion\n // already verified that the first production is valid, we now seek the 2nd production\n this.ruleStack.pop()\n this.occurrenceStack.pop()\n this.updateExpectedNext()\n this.walk(this.topProd)\n return this.possibleTokTypes\n }\n walk(prod, prevRest = []) {\n // stop scanning once we found the path\n if (!this.found) {\n super.walk(prod, prevRest)\n }\n }\n walkProdRef(refProd, currRest, prevRest) {\n // found the next production, need to keep walking in it\n if (refProd.referencedRule.name === this.nextProductionName && refProd.idx === this.nextProductionOccurrence) {\n const fullRest = currRest.concat(prevRest)\n this.updateExpectedNext()\n this.walk(refProd.referencedRule, fullRest)\n }\n }\n updateExpectedNext() {\n // need to consume the Terminal\n if (isEmpty(this.ruleStack)) {\n // must reset nextProductionXXX to avoid walking down another Top Level production while what we are\n // really seeking is the last Terminal...\n this.nextProductionName = ''\n this.nextProductionOccurrence = 0\n this.isAtEndOfPath = true\n } else {\n this.nextProductionName = this.ruleStack.pop()\n this.nextProductionOccurrence = this.occurrenceStack.pop()\n }\n }\n }\n class NextAfterTokenWalker extends AbstractNextPossibleTokensWalker {\n constructor(topProd, path) {\n super(topProd, path)\n this.path = path\n this.nextTerminalName = ''\n this.nextTerminalOccurrence = 0\n this.nextTerminalName = this.path.lastTok.name\n this.nextTerminalOccurrence = this.path.lastTokOccurrence\n }\n walkTerminal(terminal, currRest, prevRest) {\n if (\n this.isAtEndOfPath &&\n terminal.terminalType.name === this.nextTerminalName &&\n terminal.idx === this.nextTerminalOccurrence &&\n !this.found\n ) {\n const fullRest = currRest.concat(prevRest)\n const restProd = new Alternative({ definition: fullRest })\n this.possibleTokTypes = first(restProd)\n this.found = true\n }\n }\n }\n /**\n * This walker only \"walks\" a single \"TOP\" level in the Grammar Ast, this means\n * it never \"follows\" production refs\n */\n class AbstractNextTerminalAfterProductionWalker extends RestWalker {\n constructor(topRule, occurrence) {\n super()\n this.topRule = topRule\n this.occurrence = occurrence\n this.result = {\n token: undefined,\n occurrence: undefined,\n isEndOfRule: undefined,\n }\n }\n startWalking() {\n this.walk(this.topRule)\n return this.result\n }\n }\n class NextTerminalAfterManyWalker extends AbstractNextTerminalAfterProductionWalker {\n walkMany(manyProd, currRest, prevRest) {\n if (manyProd.idx === this.occurrence) {\n const firstAfterMany = head(currRest.concat(prevRest))\n this.result.isEndOfRule = firstAfterMany === undefined\n if (firstAfterMany instanceof Terminal) {\n this.result.token = firstAfterMany.terminalType\n this.result.occurrence = firstAfterMany.idx\n }\n } else {\n super.walkMany(manyProd, currRest, prevRest)\n }\n }\n }\n class NextTerminalAfterManySepWalker extends AbstractNextTerminalAfterProductionWalker {\n walkManySep(manySepProd, currRest, prevRest) {\n if (manySepProd.idx === this.occurrence) {\n const firstAfterManySep = head(currRest.concat(prevRest))\n this.result.isEndOfRule = firstAfterManySep === undefined\n if (firstAfterManySep instanceof Terminal) {\n this.result.token = firstAfterManySep.terminalType\n this.result.occurrence = firstAfterManySep.idx\n }\n } else {\n super.walkManySep(manySepProd, currRest, prevRest)\n }\n }\n }\n class NextTerminalAfterAtLeastOneWalker extends AbstractNextTerminalAfterProductionWalker {\n walkAtLeastOne(atLeastOneProd, currRest, prevRest) {\n if (atLeastOneProd.idx === this.occurrence) {\n const firstAfterAtLeastOne = head(currRest.concat(prevRest))\n this.result.isEndOfRule = firstAfterAtLeastOne === undefined\n if (firstAfterAtLeastOne instanceof Terminal) {\n this.result.token = firstAfterAtLeastOne.terminalType\n this.result.occurrence = firstAfterAtLeastOne.idx\n }\n } else {\n super.walkAtLeastOne(atLeastOneProd, currRest, prevRest)\n }\n }\n }\n // TODO: reduce code duplication in the AfterWalkers\n class NextTerminalAfterAtLeastOneSepWalker extends AbstractNextTerminalAfterProductionWalker {\n walkAtLeastOneSep(atleastOneSepProd, currRest, prevRest) {\n if (atleastOneSepProd.idx === this.occurrence) {\n const firstAfterfirstAfterAtLeastOneSep = head(currRest.concat(prevRest))\n this.result.isEndOfRule = firstAfterfirstAfterAtLeastOneSep === undefined\n if (firstAfterfirstAfterAtLeastOneSep instanceof Terminal) {\n this.result.token = firstAfterfirstAfterAtLeastOneSep.terminalType\n this.result.occurrence = firstAfterfirstAfterAtLeastOneSep.idx\n }\n } else {\n super.walkAtLeastOneSep(atleastOneSepProd, currRest, prevRest)\n }\n }\n }\n function possiblePathsFrom(targetDef, maxLength, currPath = []) {\n // avoid side effects\n currPath = clone(currPath)\n let result = []\n let i = 0\n // TODO: avoid inner funcs\n function remainingPathWith(nextDef) {\n return nextDef.concat(drop(targetDef, i + 1))\n }\n // TODO: avoid inner funcs\n function getAlternativesForProd(definition) {\n const alternatives = possiblePathsFrom(remainingPathWith(definition), maxLength, currPath)\n return result.concat(alternatives)\n }\n /**\n * Mandatory productions will halt the loop as the paths computed from their recursive calls will already contain the\n * following (rest) of the targetDef.\n *\n * For optional productions (Option/Repetition/...) the loop will continue to represent the paths that do not include the\n * the optional production.\n */\n while (currPath.length < maxLength && i < targetDef.length) {\n const prod = targetDef[i]\n /* istanbul ignore else */\n if (prod instanceof Alternative) {\n return getAlternativesForProd(prod.definition)\n } else if (prod instanceof NonTerminal) {\n return getAlternativesForProd(prod.definition)\n } else if (prod instanceof Option) {\n result = getAlternativesForProd(prod.definition)\n } else if (prod instanceof RepetitionMandatory) {\n const newDef = prod.definition.concat([\n new Repetition({\n definition: prod.definition,\n }),\n ])\n return getAlternativesForProd(newDef)\n } else if (prod instanceof RepetitionMandatoryWithSeparator) {\n const newDef = [\n new Alternative({ definition: prod.definition }),\n new Repetition({\n definition: [new Terminal({ terminalType: prod.separator })].concat(prod.definition),\n }),\n ]\n return getAlternativesForProd(newDef)\n } else if (prod instanceof RepetitionWithSeparator) {\n const newDef = prod.definition.concat([\n new Repetition({\n definition: [new Terminal({ terminalType: prod.separator })].concat(prod.definition),\n }),\n ])\n result = getAlternativesForProd(newDef)\n } else if (prod instanceof Repetition) {\n const newDef = prod.definition.concat([\n new Repetition({\n definition: prod.definition,\n }),\n ])\n result = getAlternativesForProd(newDef)\n } else if (prod instanceof Alternation) {\n forEach(prod.definition, (currAlt) => {\n // TODO: this is a limited check for empty alternatives\n // It would prevent a common case of infinite loops during parser initialization.\n // However **in-directly** empty alternatives may still cause issues.\n if (isEmpty(currAlt.definition) === false) {\n result = getAlternativesForProd(currAlt.definition)\n }\n })\n return result\n } else if (prod instanceof Terminal) {\n currPath.push(prod.terminalType)\n } else {\n throw Error('non exhaustive match')\n }\n i++\n }\n result.push({\n partialPath: currPath,\n suffixDef: drop(targetDef, i),\n })\n return result\n }\n function nextPossibleTokensAfter(initialDef, tokenVector, tokMatcher, maxLookAhead) {\n const EXIT_NON_TERMINAL = 'EXIT_NONE_TERMINAL'\n // to avoid creating a new Array each time.\n const EXIT_NON_TERMINAL_ARR = [EXIT_NON_TERMINAL]\n const EXIT_ALTERNATIVE = 'EXIT_ALTERNATIVE'\n let foundCompletePath = false\n const tokenVectorLength = tokenVector.length\n const minimalAlternativesIndex = tokenVectorLength - maxLookAhead - 1\n const result = []\n const possiblePaths = []\n possiblePaths.push({\n idx: -1,\n def: initialDef,\n ruleStack: [],\n occurrenceStack: [],\n })\n while (!isEmpty(possiblePaths)) {\n const currPath = possiblePaths.pop()\n // skip alternatives if no more results can be found (assuming deterministic grammar with fixed lookahead)\n if (currPath === EXIT_ALTERNATIVE) {\n if (foundCompletePath && last(possiblePaths).idx <= minimalAlternativesIndex) {\n // remove irrelevant alternative\n possiblePaths.pop()\n }\n continue\n }\n const currDef = currPath.def\n const currIdx = currPath.idx\n const currRuleStack = currPath.ruleStack\n const currOccurrenceStack = currPath.occurrenceStack\n // For Example: an empty path could exist in a valid grammar in the case of an EMPTY_ALT\n if (isEmpty(currDef)) {\n continue\n }\n const prod = currDef[0]\n /* istanbul ignore else */\n if (prod === EXIT_NON_TERMINAL) {\n const nextPath = {\n idx: currIdx,\n def: drop(currDef),\n ruleStack: dropRight(currRuleStack),\n occurrenceStack: dropRight(currOccurrenceStack),\n }\n possiblePaths.push(nextPath)\n } else if (prod instanceof Terminal) {\n /* istanbul ignore else */\n if (currIdx < tokenVectorLength - 1) {\n const nextIdx = currIdx + 1\n const actualToken = tokenVector[nextIdx]\n if (tokMatcher(actualToken, prod.terminalType)) {\n const nextPath = {\n idx: nextIdx,\n def: drop(currDef),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack,\n }\n possiblePaths.push(nextPath)\n }\n // end of the line\n } else if (currIdx === tokenVectorLength - 1) {\n // IGNORE ABOVE ELSE\n result.push({\n nextTokenType: prod.terminalType,\n nextTokenOccurrence: prod.idx,\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack,\n })\n foundCompletePath = true\n } else {\n throw Error('non exhaustive match')\n }\n } else if (prod instanceof NonTerminal) {\n const newRuleStack = clone(currRuleStack)\n newRuleStack.push(prod.nonTerminalName)\n const newOccurrenceStack = clone(currOccurrenceStack)\n newOccurrenceStack.push(prod.idx)\n const nextPath = {\n idx: currIdx,\n def: prod.definition.concat(EXIT_NON_TERMINAL_ARR, drop(currDef)),\n ruleStack: newRuleStack,\n occurrenceStack: newOccurrenceStack,\n }\n possiblePaths.push(nextPath)\n } else if (prod instanceof Option) {\n // the order of alternatives is meaningful, FILO (Last path will be traversed first).\n const nextPathWithout = {\n idx: currIdx,\n def: drop(currDef),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack,\n }\n possiblePaths.push(nextPathWithout)\n // required marker to avoid backtracking paths whose higher priority alternatives already matched\n possiblePaths.push(EXIT_ALTERNATIVE)\n const nextPathWith = {\n idx: currIdx,\n def: prod.definition.concat(drop(currDef)),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack,\n }\n possiblePaths.push(nextPathWith)\n } else if (prod instanceof RepetitionMandatory) {\n // TODO:(THE NEW operators here take a while...) (convert once?)\n const secondIteration = new Repetition({\n definition: prod.definition,\n idx: prod.idx,\n })\n const nextDef = prod.definition.concat([secondIteration], drop(currDef))\n const nextPath = {\n idx: currIdx,\n def: nextDef,\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack,\n }\n possiblePaths.push(nextPath)\n } else if (prod instanceof RepetitionMandatoryWithSeparator) {\n // TODO:(THE NEW operators here take a while...) (convert once?)\n const separatorGast = new Terminal({\n terminalType: prod.separator,\n })\n const secondIteration = new Repetition({\n definition: [separatorGast].concat(prod.definition),\n idx: prod.idx,\n })\n const nextDef = prod.definition.concat([secondIteration], drop(currDef))\n const nextPath = {\n idx: currIdx,\n def: nextDef,\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack,\n }\n possiblePaths.push(nextPath)\n } else if (prod instanceof RepetitionWithSeparator) {\n // the order of alternatives is meaningful, FILO (Last path will be traversed first).\n const nextPathWithout = {\n idx: currIdx,\n def: drop(currDef),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack,\n }\n possiblePaths.push(nextPathWithout)\n // required marker to avoid backtracking paths whose higher priority alternatives already matched\n possiblePaths.push(EXIT_ALTERNATIVE)\n const separatorGast = new Terminal({\n terminalType: prod.separator,\n })\n const nthRepetition = new Repetition({\n definition: [separatorGast].concat(prod.definition),\n idx: prod.idx,\n })\n const nextDef = prod.definition.concat([nthRepetition], drop(currDef))\n const nextPathWith = {\n idx: currIdx,\n def: nextDef,\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack,\n }\n possiblePaths.push(nextPathWith)\n } else if (prod instanceof Repetition) {\n // the order of alternatives is meaningful, FILO (Last path will be traversed first).\n const nextPathWithout = {\n idx: currIdx,\n def: drop(currDef),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack,\n }\n possiblePaths.push(nextPathWithout)\n // required marker to avoid backtracking paths whose higher priority alternatives already matched\n possiblePaths.push(EXIT_ALTERNATIVE)\n // TODO: an empty repetition will cause infinite loops here, will the parser detect this in selfAnalysis?\n const nthRepetition = new Repetition({\n definition: prod.definition,\n idx: prod.idx,\n })\n const nextDef = prod.definition.concat([nthRepetition], drop(currDef))\n const nextPathWith = {\n idx: currIdx,\n def: nextDef,\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack,\n }\n possiblePaths.push(nextPathWith)\n } else if (prod instanceof Alternation) {\n // the order of alternatives is meaningful, FILO (Last path will be traversed first).\n for (let i = prod.definition.length - 1; i >= 0; i--) {\n const currAlt = prod.definition[i]\n const currAltPath = {\n idx: currIdx,\n def: currAlt.definition.concat(drop(currDef)),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack,\n }\n possiblePaths.push(currAltPath)\n possiblePaths.push(EXIT_ALTERNATIVE)\n }\n } else if (prod instanceof Alternative) {\n possiblePaths.push({\n idx: currIdx,\n def: prod.definition.concat(drop(currDef)),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack,\n })\n } else if (prod instanceof Rule) {\n // last because we should only encounter at most a single one of these per invocation.\n possiblePaths.push(expandTopLevelRule(prod, currIdx, currRuleStack, currOccurrenceStack))\n } else {\n throw Error('non exhaustive match')\n }\n }\n return result\n }\n function expandTopLevelRule(topRule, currIdx, currRuleStack, currOccurrenceStack) {\n const newRuleStack = clone(currRuleStack)\n newRuleStack.push(topRule.name)\n const newCurrOccurrenceStack = clone(currOccurrenceStack)\n // top rule is always assumed to have been called with occurrence index 1\n newCurrOccurrenceStack.push(1)\n return {\n idx: currIdx,\n def: topRule.definition,\n ruleStack: newRuleStack,\n occurrenceStack: newCurrOccurrenceStack,\n }\n }\n\n var PROD_TYPE\n ;(function (PROD_TYPE) {\n PROD_TYPE[(PROD_TYPE['OPTION'] = 0)] = 'OPTION'\n PROD_TYPE[(PROD_TYPE['REPETITION'] = 1)] = 'REPETITION'\n PROD_TYPE[(PROD_TYPE['REPETITION_MANDATORY'] = 2)] = 'REPETITION_MANDATORY'\n PROD_TYPE[(PROD_TYPE['REPETITION_MANDATORY_WITH_SEPARATOR'] = 3)] = 'REPETITION_MANDATORY_WITH_SEPARATOR'\n PROD_TYPE[(PROD_TYPE['REPETITION_WITH_SEPARATOR'] = 4)] = 'REPETITION_WITH_SEPARATOR'\n PROD_TYPE[(PROD_TYPE['ALTERNATION'] = 5)] = 'ALTERNATION'\n })(PROD_TYPE || (PROD_TYPE = {}))\n function getProdType(prod) {\n /* istanbul ignore else */\n if (prod instanceof Option || prod === 'Option') {\n return PROD_TYPE.OPTION\n } else if (prod instanceof Repetition || prod === 'Repetition') {\n return PROD_TYPE.REPETITION\n } else if (prod instanceof RepetitionMandatory || prod === 'RepetitionMandatory') {\n return PROD_TYPE.REPETITION_MANDATORY\n } else if (prod instanceof RepetitionMandatoryWithSeparator || prod === 'RepetitionMandatoryWithSeparator') {\n return PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR\n } else if (prod instanceof RepetitionWithSeparator || prod === 'RepetitionWithSeparator') {\n return PROD_TYPE.REPETITION_WITH_SEPARATOR\n } else if (prod instanceof Alternation || prod === 'Alternation') {\n return PROD_TYPE.ALTERNATION\n } else {\n throw Error('non exhaustive match')\n }\n }\n function buildLookaheadFuncForOr(\n occurrence,\n ruleGrammar,\n maxLookahead,\n hasPredicates,\n dynamicTokensEnabled,\n laFuncBuilder,\n ) {\n const lookAheadPaths = getLookaheadPathsForOr(occurrence, ruleGrammar, maxLookahead)\n const tokenMatcher = areTokenCategoriesNotUsed(lookAheadPaths)\n ? tokenStructuredMatcherNoCategories\n : tokenStructuredMatcher\n return laFuncBuilder(lookAheadPaths, hasPredicates, tokenMatcher, dynamicTokensEnabled)\n }\n /**\n * When dealing with an Optional production (OPTION/MANY/2nd iteration of AT_LEAST_ONE/...) we need to compare\n * the lookahead \"inside\" the production and the lookahead immediately \"after\" it in the same top level rule (context free).\n *\n * Example: given a production:\n * ABC(DE)?DF\n *\n * The optional '(DE)?' should only be entered if we see 'DE'. a single Token 'D' is not sufficient to distinguish between the two\n * alternatives.\n *\n * @returns A Lookahead function which will return true IFF the parser should parse the Optional production.\n */\n function buildLookaheadFuncForOptionalProd(\n occurrence,\n ruleGrammar,\n k,\n dynamicTokensEnabled,\n prodType,\n lookaheadBuilder,\n ) {\n const lookAheadPaths = getLookaheadPathsForOptionalProd(occurrence, ruleGrammar, prodType, k)\n const tokenMatcher = areTokenCategoriesNotUsed(lookAheadPaths)\n ? tokenStructuredMatcherNoCategories\n : tokenStructuredMatcher\n return lookaheadBuilder(lookAheadPaths[0], tokenMatcher, dynamicTokensEnabled)\n }\n function buildAlternativesLookAheadFunc(alts, hasPredicates, tokenMatcher, dynamicTokensEnabled) {\n const numOfAlts = alts.length\n const areAllOneTokenLookahead = every(alts, (currAlt) => {\n return every(currAlt, (currPath) => {\n return currPath.length === 1\n })\n })\n // This version takes into account the predicates as well.\n if (hasPredicates) {\n /**\n * @returns {number} - The chosen alternative index\n */\n return function (orAlts) {\n // unfortunately the predicates must be extracted every single time\n // as they cannot be cached due to references to parameters(vars) which are no longer valid.\n // note that in the common case of no predicates, no cpu time will be wasted on this (see else block)\n const predicates = map(orAlts, (currAlt) => currAlt.GATE)\n for (let t = 0; t < numOfAlts; t++) {\n const currAlt = alts[t]\n const currNumOfPaths = currAlt.length\n const currPredicate = predicates[t]\n if (currPredicate !== undefined && currPredicate.call(this) === false) {\n // if the predicate does not match there is no point in checking the paths\n continue\n }\n nextPath: for (let j = 0; j < currNumOfPaths; j++) {\n const currPath = currAlt[j]\n const currPathLength = currPath.length\n for (let i = 0; i < currPathLength; i++) {\n const nextToken = this.LA(i + 1)\n if (tokenMatcher(nextToken, currPath[i]) === false) {\n // mismatch in current path\n // try the next pth\n continue nextPath\n }\n }\n // found a full path that matches.\n // this will also work for an empty ALT as the loop will be skipped\n return t\n }\n // none of the paths for the current alternative matched\n // try the next alternative\n }\n // none of the alternatives could be matched\n return undefined\n }\n } else if (areAllOneTokenLookahead && !dynamicTokensEnabled) {\n // optimized (common) case of all the lookaheads paths requiring only\n // a single token lookahead. These Optimizations cannot work if dynamically defined Tokens are used.\n const singleTokenAlts = map(alts, (currAlt) => {\n return flatten(currAlt)\n })\n const choiceToAlt = reduce(\n singleTokenAlts,\n (result, currAlt, idx) => {\n forEach(currAlt, (currTokType) => {\n if (!has(result, currTokType.tokenTypeIdx)) {\n result[currTokType.tokenTypeIdx] = idx\n }\n forEach(currTokType.categoryMatches, (currExtendingType) => {\n if (!has(result, currExtendingType)) {\n result[currExtendingType] = idx\n }\n })\n })\n return result\n },\n {},\n )\n /**\n * @returns {number} - The chosen alternative index\n */\n return function () {\n const nextToken = this.LA(1)\n return choiceToAlt[nextToken.tokenTypeIdx]\n }\n } else {\n // optimized lookahead without needing to check the predicates at all.\n // this causes code duplication which is intentional to improve performance.\n /**\n * @returns {number} - The chosen alternative index\n */\n return function () {\n for (let t = 0; t < numOfAlts; t++) {\n const currAlt = alts[t]\n const currNumOfPaths = currAlt.length\n nextPath: for (let j = 0; j < currNumOfPaths; j++) {\n const currPath = currAlt[j]\n const currPathLength = currPath.length\n for (let i = 0; i < currPathLength; i++) {\n const nextToken = this.LA(i + 1)\n if (tokenMatcher(nextToken, currPath[i]) === false) {\n // mismatch in current path\n // try the next pth\n continue nextPath\n }\n }\n // found a full path that matches.\n // this will also work for an empty ALT as the loop will be skipped\n return t\n }\n // none of the paths for the current alternative matched\n // try the next alternative\n }\n // none of the alternatives could be matched\n return undefined\n }\n }\n }\n function buildSingleAlternativeLookaheadFunction(alt, tokenMatcher, dynamicTokensEnabled) {\n const areAllOneTokenLookahead = every(alt, (currPath) => {\n return currPath.length === 1\n })\n const numOfPaths = alt.length\n // optimized (common) case of all the lookaheads paths requiring only\n // a single token lookahead.\n if (areAllOneTokenLookahead && !dynamicTokensEnabled) {\n const singleTokensTypes = flatten(alt)\n if (singleTokensTypes.length === 1 && isEmpty(singleTokensTypes[0].categoryMatches)) {\n const expectedTokenType = singleTokensTypes[0]\n const expectedTokenUniqueKey = expectedTokenType.tokenTypeIdx\n return function () {\n return this.LA(1).tokenTypeIdx === expectedTokenUniqueKey\n }\n } else {\n const choiceToAlt = reduce(\n singleTokensTypes,\n (result, currTokType, idx) => {\n result[currTokType.tokenTypeIdx] = true\n forEach(currTokType.categoryMatches, (currExtendingType) => {\n result[currExtendingType] = true\n })\n return result\n },\n [],\n )\n return function () {\n const nextToken = this.LA(1)\n return choiceToAlt[nextToken.tokenTypeIdx] === true\n }\n }\n } else {\n return function () {\n nextPath: for (let j = 0; j < numOfPaths; j++) {\n const currPath = alt[j]\n const currPathLength = currPath.length\n for (let i = 0; i < currPathLength; i++) {\n const nextToken = this.LA(i + 1)\n if (tokenMatcher(nextToken, currPath[i]) === false) {\n // mismatch in current path\n // try the next pth\n continue nextPath\n }\n }\n // found a full path that matches.\n return true\n }\n // none of the paths matched\n return false\n }\n }\n }\n class RestDefinitionFinderWalker extends RestWalker {\n constructor(topProd, targetOccurrence, targetProdType) {\n super()\n this.topProd = topProd\n this.targetOccurrence = targetOccurrence\n this.targetProdType = targetProdType\n }\n startWalking() {\n this.walk(this.topProd)\n return this.restDef\n }\n checkIsTarget(node, expectedProdType, currRest, prevRest) {\n if (node.idx === this.targetOccurrence && this.targetProdType === expectedProdType) {\n this.restDef = currRest.concat(prevRest)\n return true\n }\n // performance optimization, do not iterate over the entire Grammar ast after we have found the target\n return false\n }\n walkOption(optionProd, currRest, prevRest) {\n if (!this.checkIsTarget(optionProd, PROD_TYPE.OPTION, currRest, prevRest)) {\n super.walkOption(optionProd, currRest, prevRest)\n }\n }\n walkAtLeastOne(atLeastOneProd, currRest, prevRest) {\n if (!this.checkIsTarget(atLeastOneProd, PROD_TYPE.REPETITION_MANDATORY, currRest, prevRest)) {\n super.walkOption(atLeastOneProd, currRest, prevRest)\n }\n }\n walkAtLeastOneSep(atLeastOneSepProd, currRest, prevRest) {\n if (!this.checkIsTarget(atLeastOneSepProd, PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR, currRest, prevRest)) {\n super.walkOption(atLeastOneSepProd, currRest, prevRest)\n }\n }\n walkMany(manyProd, currRest, prevRest) {\n if (!this.checkIsTarget(manyProd, PROD_TYPE.REPETITION, currRest, prevRest)) {\n super.walkOption(manyProd, currRest, prevRest)\n }\n }\n walkManySep(manySepProd, currRest, prevRest) {\n if (!this.checkIsTarget(manySepProd, PROD_TYPE.REPETITION_WITH_SEPARATOR, currRest, prevRest)) {\n super.walkOption(manySepProd, currRest, prevRest)\n }\n }\n }\n /**\n * Returns the definition of a target production in a top level level rule.\n */\n class InsideDefinitionFinderVisitor extends GAstVisitor {\n constructor(targetOccurrence, targetProdType, targetRef) {\n super()\n this.targetOccurrence = targetOccurrence\n this.targetProdType = targetProdType\n this.targetRef = targetRef\n this.result = []\n }\n checkIsTarget(node, expectedProdName) {\n if (\n node.idx === this.targetOccurrence &&\n this.targetProdType === expectedProdName &&\n (this.targetRef === undefined || node === this.targetRef)\n ) {\n this.result = node.definition\n }\n }\n visitOption(node) {\n this.checkIsTarget(node, PROD_TYPE.OPTION)\n }\n visitRepetition(node) {\n this.checkIsTarget(node, PROD_TYPE.REPETITION)\n }\n visitRepetitionMandatory(node) {\n this.checkIsTarget(node, PROD_TYPE.REPETITION_MANDATORY)\n }\n visitRepetitionMandatoryWithSeparator(node) {\n this.checkIsTarget(node, PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR)\n }\n visitRepetitionWithSeparator(node) {\n this.checkIsTarget(node, PROD_TYPE.REPETITION_WITH_SEPARATOR)\n }\n visitAlternation(node) {\n this.checkIsTarget(node, PROD_TYPE.ALTERNATION)\n }\n }\n function initializeArrayOfArrays(size) {\n const result = new Array(size)\n for (let i = 0; i < size; i++) {\n result[i] = []\n }\n return result\n }\n /**\n * A sort of hash function between a Path in the grammar and a string.\n * Note that this returns multiple \"hashes\" to support the scenario of token categories.\n * - A single path with categories may match multiple **actual** paths.\n */\n function pathToHashKeys(path) {\n let keys = ['']\n for (let i = 0; i < path.length; i++) {\n const tokType = path[i]\n const longerKeys = []\n for (let j = 0; j < keys.length; j++) {\n const currShorterKey = keys[j]\n longerKeys.push(currShorterKey + '_' + tokType.tokenTypeIdx)\n for (let t = 0; t < tokType.categoryMatches.length; t++) {\n const categoriesKeySuffix = '_' + tokType.categoryMatches[t]\n longerKeys.push(currShorterKey + categoriesKeySuffix)\n }\n }\n keys = longerKeys\n }\n return keys\n }\n /**\n * Imperative style due to being called from a hot spot\n */\n function isUniquePrefixHash(altKnownPathsKeys, searchPathKeys, idx) {\n for (let currAltIdx = 0; currAltIdx < altKnownPathsKeys.length; currAltIdx++) {\n // We only want to test vs the other alternatives\n if (currAltIdx === idx) {\n continue\n }\n const otherAltKnownPathsKeys = altKnownPathsKeys[currAltIdx]\n for (let searchIdx = 0; searchIdx < searchPathKeys.length; searchIdx++) {\n const searchKey = searchPathKeys[searchIdx]\n if (otherAltKnownPathsKeys[searchKey] === true) {\n return false\n }\n }\n }\n // None of the SearchPathKeys were found in any of the other alternatives\n return true\n }\n function lookAheadSequenceFromAlternatives(altsDefs, k) {\n const partialAlts = map(altsDefs, (currAlt) => possiblePathsFrom([currAlt], 1))\n const finalResult = initializeArrayOfArrays(partialAlts.length)\n const altsHashes = map(partialAlts, (currAltPaths) => {\n const dict = {}\n forEach(currAltPaths, (item) => {\n const keys = pathToHashKeys(item.partialPath)\n forEach(keys, (currKey) => {\n dict[currKey] = true\n })\n })\n return dict\n })\n let newData = partialAlts\n // maxLookahead loop\n for (let pathLength = 1; pathLength <= k; pathLength++) {\n const currDataset = newData\n newData = initializeArrayOfArrays(currDataset.length)\n // alternatives loop\n for (let altIdx = 0; altIdx < currDataset.length; altIdx++) {\n const currAltPathsAndSuffixes = currDataset[altIdx]\n // paths in current alternative loop\n for (let currPathIdx = 0; currPathIdx < currAltPathsAndSuffixes.length; currPathIdx++) {\n const currPathPrefix = currAltPathsAndSuffixes[currPathIdx].partialPath\n const suffixDef = currAltPathsAndSuffixes[currPathIdx].suffixDef\n const prefixKeys = pathToHashKeys(currPathPrefix)\n const isUnique = isUniquePrefixHash(altsHashes, prefixKeys, altIdx)\n // End of the line for this path.\n if (isUnique || isEmpty(suffixDef) || currPathPrefix.length === k) {\n const currAltResult = finalResult[altIdx]\n // TODO: Can we implement a containsPath using Maps/Dictionaries?\n if (containsPath(currAltResult, currPathPrefix) === false) {\n currAltResult.push(currPathPrefix)\n // Update all new keys for the current path.\n for (let j = 0; j < prefixKeys.length; j++) {\n const currKey = prefixKeys[j]\n altsHashes[altIdx][currKey] = true\n }\n }\n }\n // Expand longer paths\n else {\n const newPartialPathsAndSuffixes = possiblePathsFrom(suffixDef, pathLength + 1, currPathPrefix)\n newData[altIdx] = newData[altIdx].concat(newPartialPathsAndSuffixes)\n // Update keys for new known paths\n forEach(newPartialPathsAndSuffixes, (item) => {\n const prefixKeys = pathToHashKeys(item.partialPath)\n forEach(prefixKeys, (key) => {\n altsHashes[altIdx][key] = true\n })\n })\n }\n }\n }\n }\n return finalResult\n }\n function getLookaheadPathsForOr(occurrence, ruleGrammar, k, orProd) {\n const visitor = new InsideDefinitionFinderVisitor(occurrence, PROD_TYPE.ALTERNATION, orProd)\n ruleGrammar.accept(visitor)\n return lookAheadSequenceFromAlternatives(visitor.result, k)\n }\n function getLookaheadPathsForOptionalProd(occurrence, ruleGrammar, prodType, k) {\n const insideDefVisitor = new InsideDefinitionFinderVisitor(occurrence, prodType)\n ruleGrammar.accept(insideDefVisitor)\n const insideDef = insideDefVisitor.result\n const afterDefWalker = new RestDefinitionFinderWalker(ruleGrammar, occurrence, prodType)\n const afterDef = afterDefWalker.startWalking()\n const insideFlat = new Alternative({ definition: insideDef })\n const afterFlat = new Alternative({ definition: afterDef })\n return lookAheadSequenceFromAlternatives([insideFlat, afterFlat], k)\n }\n function containsPath(alternative, searchPath) {\n compareOtherPath: for (let i = 0; i < alternative.length; i++) {\n const otherPath = alternative[i]\n if (otherPath.length !== searchPath.length) {\n continue\n }\n for (let j = 0; j < otherPath.length; j++) {\n const searchTok = searchPath[j]\n const otherTok = otherPath[j]\n const matchingTokens =\n searchTok === otherTok || otherTok.categoryMatchesMap[searchTok.tokenTypeIdx] !== undefined\n if (matchingTokens === false) {\n continue compareOtherPath\n }\n }\n return true\n }\n return false\n }\n function isStrictPrefixOfPath(prefix, other) {\n return (\n prefix.length < other.length &&\n every(prefix, (tokType, idx) => {\n const otherTokType = other[idx]\n return tokType === otherTokType || otherTokType.categoryMatchesMap[tokType.tokenTypeIdx]\n })\n )\n }\n function areTokenCategoriesNotUsed(lookAheadPaths) {\n return every(lookAheadPaths, (singleAltPaths) =>\n every(singleAltPaths, (singlePath) => every(singlePath, (token) => isEmpty(token.categoryMatches))),\n )\n }\n\n function validateLookahead(options) {\n const lookaheadValidationErrorMessages = options.lookaheadStrategy.validate({\n rules: options.rules,\n tokenTypes: options.tokenTypes,\n grammarName: options.grammarName,\n })\n return map(lookaheadValidationErrorMessages, (errorMessage) =>\n Object.assign({ type: ParserDefinitionErrorType.CUSTOM_LOOKAHEAD_VALIDATION }, errorMessage),\n )\n }\n function validateGrammar$1(topLevels, tokenTypes, errMsgProvider, grammarName) {\n const duplicateErrors = flatMap(topLevels, (currTopLevel) =>\n validateDuplicateProductions(currTopLevel, errMsgProvider),\n )\n const termsNamespaceConflictErrors = checkTerminalAndNoneTerminalsNameSpace(topLevels, tokenTypes, errMsgProvider)\n const tooManyAltsErrors = flatMap(topLevels, (curRule) => validateTooManyAlts(curRule, errMsgProvider))\n const duplicateRulesError = flatMap(topLevels, (curRule) =>\n validateRuleDoesNotAlreadyExist(curRule, topLevels, grammarName, errMsgProvider),\n )\n return duplicateErrors.concat(termsNamespaceConflictErrors, tooManyAltsErrors, duplicateRulesError)\n }\n function validateDuplicateProductions(topLevelRule, errMsgProvider) {\n const collectorVisitor = new OccurrenceValidationCollector()\n topLevelRule.accept(collectorVisitor)\n const allRuleProductions = collectorVisitor.allProductions\n const productionGroups = groupBy$1(allRuleProductions, identifyProductionForDuplicates)\n const duplicates = pickBy(productionGroups, (currGroup) => {\n return currGroup.length > 1\n })\n const errors = map(values(duplicates), (currDuplicates) => {\n const firstProd = head(currDuplicates)\n const msg = errMsgProvider.buildDuplicateFoundError(topLevelRule, currDuplicates)\n const dslName = getProductionDslName(firstProd)\n const defError = {\n message: msg,\n type: ParserDefinitionErrorType.DUPLICATE_PRODUCTIONS,\n ruleName: topLevelRule.name,\n dslName: dslName,\n occurrence: firstProd.idx,\n }\n const param = getExtraProductionArgument(firstProd)\n if (param) {\n defError.parameter = param\n }\n return defError\n })\n return errors\n }\n function identifyProductionForDuplicates(prod) {\n return `${getProductionDslName(prod)}_#_${prod.idx}_#_${getExtraProductionArgument(prod)}`\n }\n function getExtraProductionArgument(prod) {\n if (prod instanceof Terminal) {\n return prod.terminalType.name\n } else if (prod instanceof NonTerminal) {\n return prod.nonTerminalName\n } else {\n return ''\n }\n }\n class OccurrenceValidationCollector extends GAstVisitor {\n constructor() {\n super(...arguments)\n this.allProductions = []\n }\n visitNonTerminal(subrule) {\n this.allProductions.push(subrule)\n }\n visitOption(option) {\n this.allProductions.push(option)\n }\n visitRepetitionWithSeparator(manySep) {\n this.allProductions.push(manySep)\n }\n visitRepetitionMandatory(atLeastOne) {\n this.allProductions.push(atLeastOne)\n }\n visitRepetitionMandatoryWithSeparator(atLeastOneSep) {\n this.allProductions.push(atLeastOneSep)\n }\n visitRepetition(many) {\n this.allProductions.push(many)\n }\n visitAlternation(or) {\n this.allProductions.push(or)\n }\n visitTerminal(terminal) {\n this.allProductions.push(terminal)\n }\n }\n function validateRuleDoesNotAlreadyExist(rule, allRules, className, errMsgProvider) {\n const errors = []\n const occurrences = reduce(\n allRules,\n (result, curRule) => {\n if (curRule.name === rule.name) {\n return result + 1\n }\n return result\n },\n 0,\n )\n if (occurrences > 1) {\n const errMsg = errMsgProvider.buildDuplicateRuleNameError({\n topLevelRule: rule,\n grammarName: className,\n })\n errors.push({\n message: errMsg,\n type: ParserDefinitionErrorType.DUPLICATE_RULE_NAME,\n ruleName: rule.name,\n })\n }\n return errors\n }\n // TODO: is there anyway to get only the rule names of rules inherited from the super grammars?\n // This is not part of the IGrammarErrorProvider because the validation cannot be performed on\n // The grammar structure, only at runtime.\n function validateRuleIsOverridden(ruleName, definedRulesNames, className) {\n const errors = []\n let errMsg\n if (!includes(definedRulesNames, ruleName)) {\n errMsg =\n `Invalid rule override, rule: ->${ruleName}<- cannot be overridden in the grammar: ->${className}<-` +\n `as it is not defined in any of the super grammars `\n errors.push({\n message: errMsg,\n type: ParserDefinitionErrorType.INVALID_RULE_OVERRIDE,\n ruleName: ruleName,\n })\n }\n return errors\n }\n function validateNoLeftRecursion(topRule, currRule, errMsgProvider, path = []) {\n const errors = []\n const nextNonTerminals = getFirstNoneTerminal(currRule.definition)\n if (isEmpty(nextNonTerminals)) {\n return []\n } else {\n const ruleName = topRule.name\n const foundLeftRecursion = includes(nextNonTerminals, topRule)\n if (foundLeftRecursion) {\n errors.push({\n message: errMsgProvider.buildLeftRecursionError({\n topLevelRule: topRule,\n leftRecursionPath: path,\n }),\n type: ParserDefinitionErrorType.LEFT_RECURSION,\n ruleName: ruleName,\n })\n }\n // we are only looking for cyclic paths leading back to the specific topRule\n // other cyclic paths are ignored, we still need this difference to avoid infinite loops...\n const validNextSteps = difference$1(nextNonTerminals, path.concat([topRule]))\n const errorsFromNextSteps = flatMap(validNextSteps, (currRefRule) => {\n const newPath = clone(path)\n newPath.push(currRefRule)\n return validateNoLeftRecursion(topRule, currRefRule, errMsgProvider, newPath)\n })\n return errors.concat(errorsFromNextSteps)\n }\n }\n function getFirstNoneTerminal(definition) {\n let result = []\n if (isEmpty(definition)) {\n return result\n }\n const firstProd = head(definition)\n /* istanbul ignore else */\n if (firstProd instanceof NonTerminal) {\n result.push(firstProd.referencedRule)\n } else if (\n firstProd instanceof Alternative ||\n firstProd instanceof Option ||\n firstProd instanceof RepetitionMandatory ||\n firstProd instanceof RepetitionMandatoryWithSeparator ||\n firstProd instanceof RepetitionWithSeparator ||\n firstProd instanceof Repetition\n ) {\n result = result.concat(getFirstNoneTerminal(firstProd.definition))\n } else if (firstProd instanceof Alternation) {\n // each sub definition in alternation is a FLAT\n result = flatten(map(firstProd.definition, (currSubDef) => getFirstNoneTerminal(currSubDef.definition)))\n } else if (firstProd instanceof Terminal);\n else {\n throw Error('non exhaustive match')\n }\n const isFirstOptional = isOptionalProd(firstProd)\n const hasMore = definition.length > 1\n if (isFirstOptional && hasMore) {\n const rest = drop(definition)\n return result.concat(getFirstNoneTerminal(rest))\n } else {\n return result\n }\n }\n class OrCollector extends GAstVisitor {\n constructor() {\n super(...arguments)\n this.alternations = []\n }\n visitAlternation(node) {\n this.alternations.push(node)\n }\n }\n function validateEmptyOrAlternative(topLevelRule, errMsgProvider) {\n const orCollector = new OrCollector()\n topLevelRule.accept(orCollector)\n const ors = orCollector.alternations\n const errors = flatMap(ors, (currOr) => {\n const exceptLast = dropRight(currOr.definition)\n return flatMap(exceptLast, (currAlternative, currAltIdx) => {\n const possibleFirstInAlt = nextPossibleTokensAfter([currAlternative], [], tokenStructuredMatcher, 1)\n if (isEmpty(possibleFirstInAlt)) {\n return [\n {\n message: errMsgProvider.buildEmptyAlternationError({\n topLevelRule: topLevelRule,\n alternation: currOr,\n emptyChoiceIdx: currAltIdx,\n }),\n type: ParserDefinitionErrorType.NONE_LAST_EMPTY_ALT,\n ruleName: topLevelRule.name,\n occurrence: currOr.idx,\n alternative: currAltIdx + 1,\n },\n ]\n } else {\n return []\n }\n })\n })\n return errors\n }\n function validateAmbiguousAlternationAlternatives(topLevelRule, globalMaxLookahead, errMsgProvider) {\n const orCollector = new OrCollector()\n topLevelRule.accept(orCollector)\n let ors = orCollector.alternations\n // New Handling of ignoring ambiguities\n // - https://github.com/chevrotain/chevrotain/issues/869\n ors = reject(ors, (currOr) => currOr.ignoreAmbiguities === true)\n const errors = flatMap(ors, (currOr) => {\n const currOccurrence = currOr.idx\n const actualMaxLookahead = currOr.maxLookahead || globalMaxLookahead\n const alternatives = getLookaheadPathsForOr(currOccurrence, topLevelRule, actualMaxLookahead, currOr)\n const altsAmbiguityErrors = checkAlternativesAmbiguities(alternatives, currOr, topLevelRule, errMsgProvider)\n const altsPrefixAmbiguityErrors = checkPrefixAlternativesAmbiguities(\n alternatives,\n currOr,\n topLevelRule,\n errMsgProvider,\n )\n return altsAmbiguityErrors.concat(altsPrefixAmbiguityErrors)\n })\n return errors\n }\n class RepetitionCollector extends GAstVisitor {\n constructor() {\n super(...arguments)\n this.allProductions = []\n }\n visitRepetitionWithSeparator(manySep) {\n this.allProductions.push(manySep)\n }\n visitRepetitionMandatory(atLeastOne) {\n this.allProductions.push(atLeastOne)\n }\n visitRepetitionMandatoryWithSeparator(atLeastOneSep) {\n this.allProductions.push(atLeastOneSep)\n }\n visitRepetition(many) {\n this.allProductions.push(many)\n }\n }\n function validateTooManyAlts(topLevelRule, errMsgProvider) {\n const orCollector = new OrCollector()\n topLevelRule.accept(orCollector)\n const ors = orCollector.alternations\n const errors = flatMap(ors, (currOr) => {\n if (currOr.definition.length > 255) {\n return [\n {\n message: errMsgProvider.buildTooManyAlternativesError({\n topLevelRule: topLevelRule,\n alternation: currOr,\n }),\n type: ParserDefinitionErrorType.TOO_MANY_ALTS,\n ruleName: topLevelRule.name,\n occurrence: currOr.idx,\n },\n ]\n } else {\n return []\n }\n })\n return errors\n }\n function validateSomeNonEmptyLookaheadPath(topLevelRules, maxLookahead, errMsgProvider) {\n const errors = []\n forEach(topLevelRules, (currTopRule) => {\n const collectorVisitor = new RepetitionCollector()\n currTopRule.accept(collectorVisitor)\n const allRuleProductions = collectorVisitor.allProductions\n forEach(allRuleProductions, (currProd) => {\n const prodType = getProdType(currProd)\n const actualMaxLookahead = currProd.maxLookahead || maxLookahead\n const currOccurrence = currProd.idx\n const paths = getLookaheadPathsForOptionalProd(currOccurrence, currTopRule, prodType, actualMaxLookahead)\n const pathsInsideProduction = paths[0]\n if (isEmpty(flatten(pathsInsideProduction))) {\n const errMsg = errMsgProvider.buildEmptyRepetitionError({\n topLevelRule: currTopRule,\n repetition: currProd,\n })\n errors.push({\n message: errMsg,\n type: ParserDefinitionErrorType.NO_NON_EMPTY_LOOKAHEAD,\n ruleName: currTopRule.name,\n })\n }\n })\n })\n return errors\n }\n function checkAlternativesAmbiguities(alternatives, alternation, rule, errMsgProvider) {\n const foundAmbiguousPaths = []\n const identicalAmbiguities = reduce(\n alternatives,\n (result, currAlt, currAltIdx) => {\n // ignore (skip) ambiguities with this alternative\n if (alternation.definition[currAltIdx].ignoreAmbiguities === true) {\n return result\n }\n forEach(currAlt, (currPath) => {\n const altsCurrPathAppearsIn = [currAltIdx]\n forEach(alternatives, (currOtherAlt, currOtherAltIdx) => {\n if (\n currAltIdx !== currOtherAltIdx &&\n containsPath(currOtherAlt, currPath) &&\n // ignore (skip) ambiguities with this \"other\" alternative\n alternation.definition[currOtherAltIdx].ignoreAmbiguities !== true\n ) {\n altsCurrPathAppearsIn.push(currOtherAltIdx)\n }\n })\n if (altsCurrPathAppearsIn.length > 1 && !containsPath(foundAmbiguousPaths, currPath)) {\n foundAmbiguousPaths.push(currPath)\n result.push({\n alts: altsCurrPathAppearsIn,\n path: currPath,\n })\n }\n })\n return result\n },\n [],\n )\n const currErrors = map(identicalAmbiguities, (currAmbDescriptor) => {\n const ambgIndices = map(currAmbDescriptor.alts, (currAltIdx) => currAltIdx + 1)\n const currMessage = errMsgProvider.buildAlternationAmbiguityError({\n topLevelRule: rule,\n alternation: alternation,\n ambiguityIndices: ambgIndices,\n prefixPath: currAmbDescriptor.path,\n })\n return {\n message: currMessage,\n type: ParserDefinitionErrorType.AMBIGUOUS_ALTS,\n ruleName: rule.name,\n occurrence: alternation.idx,\n alternatives: currAmbDescriptor.alts,\n }\n })\n return currErrors\n }\n function checkPrefixAlternativesAmbiguities(alternatives, alternation, rule, errMsgProvider) {\n // flatten\n const pathsAndIndices = reduce(\n alternatives,\n (result, currAlt, idx) => {\n const currPathsAndIdx = map(currAlt, (currPath) => {\n return { idx: idx, path: currPath }\n })\n return result.concat(currPathsAndIdx)\n },\n [],\n )\n const errors = compact(\n flatMap(pathsAndIndices, (currPathAndIdx) => {\n const alternativeGast = alternation.definition[currPathAndIdx.idx]\n // ignore (skip) ambiguities with this alternative\n if (alternativeGast.ignoreAmbiguities === true) {\n return []\n }\n const targetIdx = currPathAndIdx.idx\n const targetPath = currPathAndIdx.path\n const prefixAmbiguitiesPathsAndIndices = filter(pathsAndIndices, (searchPathAndIdx) => {\n // prefix ambiguity can only be created from lower idx (higher priority) path\n return (\n // ignore (skip) ambiguities with this \"other\" alternative\n alternation.definition[searchPathAndIdx.idx].ignoreAmbiguities !== true &&\n searchPathAndIdx.idx < targetIdx &&\n // checking for strict prefix because identical lookaheads\n // will be be detected using a different validation.\n isStrictPrefixOfPath(searchPathAndIdx.path, targetPath)\n )\n })\n const currPathPrefixErrors = map(prefixAmbiguitiesPathsAndIndices, (currAmbPathAndIdx) => {\n const ambgIndices = [currAmbPathAndIdx.idx + 1, targetIdx + 1]\n const occurrence = alternation.idx === 0 ? '' : alternation.idx\n const message = errMsgProvider.buildAlternationPrefixAmbiguityError({\n topLevelRule: rule,\n alternation: alternation,\n ambiguityIndices: ambgIndices,\n prefixPath: currAmbPathAndIdx.path,\n })\n return {\n message: message,\n type: ParserDefinitionErrorType.AMBIGUOUS_PREFIX_ALTS,\n ruleName: rule.name,\n occurrence: occurrence,\n alternatives: ambgIndices,\n }\n })\n return currPathPrefixErrors\n }),\n )\n return errors\n }\n function checkTerminalAndNoneTerminalsNameSpace(topLevels, tokenTypes, errMsgProvider) {\n const errors = []\n const tokenNames = map(tokenTypes, (currToken) => currToken.name)\n forEach(topLevels, (currRule) => {\n const currRuleName = currRule.name\n if (includes(tokenNames, currRuleName)) {\n const errMsg = errMsgProvider.buildNamespaceConflictError(currRule)\n errors.push({\n message: errMsg,\n type: ParserDefinitionErrorType.CONFLICT_TOKENS_RULES_NAMESPACE,\n ruleName: currRuleName,\n })\n }\n })\n return errors\n }\n\n function resolveGrammar(options) {\n const actualOptions = defaults$1(options, {\n errMsgProvider: defaultGrammarResolverErrorProvider,\n })\n const topRulesTable = {}\n forEach(options.rules, (rule) => {\n topRulesTable[rule.name] = rule\n })\n return resolveGrammar$1(topRulesTable, actualOptions.errMsgProvider)\n }\n function validateGrammar(options) {\n options = defaults$1(options, {\n errMsgProvider: defaultGrammarValidatorErrorProvider,\n })\n return validateGrammar$1(options.rules, options.tokenTypes, options.errMsgProvider, options.grammarName)\n }\n\n const MISMATCHED_TOKEN_EXCEPTION = 'MismatchedTokenException'\n const NO_VIABLE_ALT_EXCEPTION = 'NoViableAltException'\n const EARLY_EXIT_EXCEPTION = 'EarlyExitException'\n const NOT_ALL_INPUT_PARSED_EXCEPTION = 'NotAllInputParsedException'\n const RECOGNITION_EXCEPTION_NAMES = [\n MISMATCHED_TOKEN_EXCEPTION,\n NO_VIABLE_ALT_EXCEPTION,\n EARLY_EXIT_EXCEPTION,\n NOT_ALL_INPUT_PARSED_EXCEPTION,\n ]\n Object.freeze(RECOGNITION_EXCEPTION_NAMES)\n // hacks to bypass no support for custom Errors in javascript/typescript\n function isRecognitionException(error) {\n // can't do instanceof on hacked custom js exceptions\n return includes(RECOGNITION_EXCEPTION_NAMES, error.name)\n }\n class RecognitionException extends Error {\n constructor(message, token) {\n super(message)\n this.token = token\n this.resyncedTokens = []\n // fix prototype chain when typescript target is ES5\n Object.setPrototypeOf(this, new.target.prototype)\n /* istanbul ignore next - V8 workaround to remove constructor from stacktrace when typescript target is ES5 */\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor)\n }\n }\n }\n class MismatchedTokenException extends RecognitionException {\n constructor(message, token, previousToken) {\n super(message, token)\n this.previousToken = previousToken\n this.name = MISMATCHED_TOKEN_EXCEPTION\n }\n }\n class NoViableAltException extends RecognitionException {\n constructor(message, token, previousToken) {\n super(message, token)\n this.previousToken = previousToken\n this.name = NO_VIABLE_ALT_EXCEPTION\n }\n }\n class NotAllInputParsedException extends RecognitionException {\n constructor(message, token) {\n super(message, token)\n this.name = NOT_ALL_INPUT_PARSED_EXCEPTION\n }\n }\n class EarlyExitException extends RecognitionException {\n constructor(message, token, previousToken) {\n super(message, token)\n this.previousToken = previousToken\n this.name = EARLY_EXIT_EXCEPTION\n }\n }\n\n const EOF_FOLLOW_KEY = {}\n const IN_RULE_RECOVERY_EXCEPTION = 'InRuleRecoveryException'\n class InRuleRecoveryException extends Error {\n constructor(message) {\n super(message)\n this.name = IN_RULE_RECOVERY_EXCEPTION\n }\n }\n /**\n * This trait is responsible for the error recovery and fault tolerant logic\n */\n class Recoverable {\n initRecoverable(config) {\n this.firstAfterRepMap = {}\n this.resyncFollows = {}\n this.recoveryEnabled = has(config, 'recoveryEnabled')\n ? config.recoveryEnabled // assumes end user provides the correct config value/type\n : DEFAULT_PARSER_CONFIG.recoveryEnabled\n // performance optimization, NOOP will be inlined which\n // effectively means that this optional feature does not exist\n // when not used.\n if (this.recoveryEnabled) {\n this.attemptInRepetitionRecovery = attemptInRepetitionRecovery\n }\n }\n getTokenToInsert(tokType) {\n const tokToInsert = createTokenInstance(tokType, '', NaN, NaN, NaN, NaN, NaN, NaN)\n tokToInsert.isInsertedInRecovery = true\n return tokToInsert\n }\n canTokenTypeBeInsertedInRecovery(tokType) {\n return true\n }\n canTokenTypeBeDeletedInRecovery(tokType) {\n return true\n }\n tryInRepetitionRecovery(grammarRule, grammarRuleArgs, lookAheadFunc, expectedTokType) {\n // TODO: can the resyncTokenType be cached?\n const reSyncTokType = this.findReSyncTokenType()\n const savedLexerState = this.exportLexerState()\n const resyncedTokens = []\n let passedResyncPoint = false\n const nextTokenWithoutResync = this.LA(1)\n let currToken = this.LA(1)\n const generateErrorMessage = () => {\n const previousToken = this.LA(0)\n // we are preemptively re-syncing before an error has been detected, therefor we must reproduce\n // the error that would have been thrown\n const msg = this.errorMessageProvider.buildMismatchTokenMessage({\n expected: expectedTokType,\n actual: nextTokenWithoutResync,\n previous: previousToken,\n ruleName: this.getCurrRuleFullName(),\n })\n const error = new MismatchedTokenException(msg, nextTokenWithoutResync, this.LA(0))\n // the first token here will be the original cause of the error, this is not part of the resyncedTokens property.\n error.resyncedTokens = dropRight(resyncedTokens)\n this.SAVE_ERROR(error)\n }\n while (!passedResyncPoint) {\n // re-synced to a point where we can safely exit the repetition/\n if (this.tokenMatcher(currToken, expectedTokType)) {\n generateErrorMessage()\n return // must return here to avoid reverting the inputIdx\n } else if (lookAheadFunc.call(this)) {\n // we skipped enough tokens so we can resync right back into another iteration of the repetition grammar rule\n generateErrorMessage()\n // recursive invocation in other to support multiple re-syncs in the same top level repetition grammar rule\n grammarRule.apply(this, grammarRuleArgs)\n return // must return here to avoid reverting the inputIdx\n } else if (this.tokenMatcher(currToken, reSyncTokType)) {\n passedResyncPoint = true\n } else {\n currToken = this.SKIP_TOKEN()\n this.addToResyncTokens(currToken, resyncedTokens)\n }\n }\n // we were unable to find a CLOSER point to resync inside the Repetition, reset the state.\n // The parsing exception we were trying to prevent will happen in the NEXT parsing step. it may be handled by\n // \"between rules\" resync recovery later in the flow.\n this.importLexerState(savedLexerState)\n }\n shouldInRepetitionRecoveryBeTried(expectTokAfterLastMatch, nextTokIdx, notStuck) {\n // Edge case of arriving from a MANY repetition which is stuck\n // Attempting recovery in this case could cause an infinite loop\n if (notStuck === false) {\n return false\n }\n // no need to recover, next token is what we expect...\n if (this.tokenMatcher(this.LA(1), expectTokAfterLastMatch)) {\n return false\n }\n // error recovery is disabled during backtracking as it can make the parser ignore a valid grammar path\n // and prefer some backtracking path that includes recovered errors.\n if (this.isBackTracking()) {\n return false\n }\n // if we can perform inRule recovery (single token insertion or deletion) we always prefer that recovery algorithm\n // because if it works, it makes the least amount of changes to the input stream (greedy algorithm)\n //noinspection RedundantIfStatementJS\n if (\n this.canPerformInRuleRecovery(\n expectTokAfterLastMatch,\n this.getFollowsForInRuleRecovery(expectTokAfterLastMatch, nextTokIdx),\n )\n ) {\n return false\n }\n return true\n }\n // Error Recovery functionality\n getFollowsForInRuleRecovery(tokType, tokIdxInRule) {\n const grammarPath = this.getCurrentGrammarPath(tokType, tokIdxInRule)\n const follows = this.getNextPossibleTokenTypes(grammarPath)\n return follows\n }\n tryInRuleRecovery(expectedTokType, follows) {\n if (this.canRecoverWithSingleTokenInsertion(expectedTokType, follows)) {\n const tokToInsert = this.getTokenToInsert(expectedTokType)\n return tokToInsert\n }\n if (this.canRecoverWithSingleTokenDeletion(expectedTokType)) {\n const nextTok = this.SKIP_TOKEN()\n this.consumeToken()\n return nextTok\n }\n throw new InRuleRecoveryException('sad sad panda')\n }\n canPerformInRuleRecovery(expectedToken, follows) {\n return (\n this.canRecoverWithSingleTokenInsertion(expectedToken, follows) ||\n this.canRecoverWithSingleTokenDeletion(expectedToken)\n )\n }\n canRecoverWithSingleTokenInsertion(expectedTokType, follows) {\n if (!this.canTokenTypeBeInsertedInRecovery(expectedTokType)) {\n return false\n }\n // must know the possible following tokens to perform single token insertion\n if (isEmpty(follows)) {\n return false\n }\n const mismatchedTok = this.LA(1)\n const isMisMatchedTokInFollows =\n find$1(follows, (possibleFollowsTokType) => {\n return this.tokenMatcher(mismatchedTok, possibleFollowsTokType)\n }) !== undefined\n return isMisMatchedTokInFollows\n }\n canRecoverWithSingleTokenDeletion(expectedTokType) {\n if (!this.canTokenTypeBeDeletedInRecovery(expectedTokType)) {\n return false\n }\n const isNextTokenWhatIsExpected = this.tokenMatcher(this.LA(2), expectedTokType)\n return isNextTokenWhatIsExpected\n }\n isInCurrentRuleReSyncSet(tokenTypeIdx) {\n const followKey = this.getCurrFollowKey()\n const currentRuleReSyncSet = this.getFollowSetFromFollowKey(followKey)\n return includes(currentRuleReSyncSet, tokenTypeIdx)\n }\n findReSyncTokenType() {\n const allPossibleReSyncTokTypes = this.flattenFollowSet()\n // this loop will always terminate as EOF is always in the follow stack and also always (virtually) in the input\n let nextToken = this.LA(1)\n let k = 2\n while (true) {\n const foundMatch = find$1(allPossibleReSyncTokTypes, (resyncTokType) => {\n const canMatch = tokenMatcher(nextToken, resyncTokType)\n return canMatch\n })\n if (foundMatch !== undefined) {\n return foundMatch\n }\n nextToken = this.LA(k)\n k++\n }\n }\n getCurrFollowKey() {\n // the length is at least one as we always add the ruleName to the stack before invoking the rule.\n if (this.RULE_STACK.length === 1) {\n return EOF_FOLLOW_KEY\n }\n const currRuleShortName = this.getLastExplicitRuleShortName()\n const currRuleIdx = this.getLastExplicitRuleOccurrenceIndex()\n const prevRuleShortName = this.getPreviousExplicitRuleShortName()\n return {\n ruleName: this.shortRuleNameToFullName(currRuleShortName),\n idxInCallingRule: currRuleIdx,\n inRule: this.shortRuleNameToFullName(prevRuleShortName),\n }\n }\n buildFullFollowKeyStack() {\n const explicitRuleStack = this.RULE_STACK\n const explicitOccurrenceStack = this.RULE_OCCURRENCE_STACK\n return map(explicitRuleStack, (ruleName, idx) => {\n if (idx === 0) {\n return EOF_FOLLOW_KEY\n }\n return {\n ruleName: this.shortRuleNameToFullName(ruleName),\n idxInCallingRule: explicitOccurrenceStack[idx],\n inRule: this.shortRuleNameToFullName(explicitRuleStack[idx - 1]),\n }\n })\n }\n flattenFollowSet() {\n const followStack = map(this.buildFullFollowKeyStack(), (currKey) => {\n return this.getFollowSetFromFollowKey(currKey)\n })\n return flatten(followStack)\n }\n getFollowSetFromFollowKey(followKey) {\n if (followKey === EOF_FOLLOW_KEY) {\n return [EOF]\n }\n const followName = followKey.ruleName + followKey.idxInCallingRule + IN + followKey.inRule\n return this.resyncFollows[followName]\n }\n // It does not make any sense to include a virtual EOF token in the list of resynced tokens\n // as EOF does not really exist and thus does not contain any useful information (line/column numbers)\n addToResyncTokens(token, resyncTokens) {\n if (!this.tokenMatcher(token, EOF)) {\n resyncTokens.push(token)\n }\n return resyncTokens\n }\n reSyncTo(tokType) {\n const resyncedTokens = []\n let nextTok = this.LA(1)\n while (this.tokenMatcher(nextTok, tokType) === false) {\n nextTok = this.SKIP_TOKEN()\n this.addToResyncTokens(nextTok, resyncedTokens)\n }\n // the last token is not part of the error.\n return dropRight(resyncedTokens)\n }\n attemptInRepetitionRecovery(prodFunc, args, lookaheadFunc, dslMethodIdx, prodOccurrence, nextToksWalker, notStuck) {\n // by default this is a NO-OP\n // The actual implementation is with the function(not method) below\n }\n getCurrentGrammarPath(tokType, tokIdxInRule) {\n const pathRuleStack = this.getHumanReadableRuleStack()\n const pathOccurrenceStack = clone(this.RULE_OCCURRENCE_STACK)\n const grammarPath = {\n ruleStack: pathRuleStack,\n occurrenceStack: pathOccurrenceStack,\n lastTok: tokType,\n lastTokOccurrence: tokIdxInRule,\n }\n return grammarPath\n }\n getHumanReadableRuleStack() {\n return map(this.RULE_STACK, (currShortName) => this.shortRuleNameToFullName(currShortName))\n }\n }\n function attemptInRepetitionRecovery(\n prodFunc,\n args,\n lookaheadFunc,\n dslMethodIdx,\n prodOccurrence,\n nextToksWalker,\n notStuck,\n ) {\n const key = this.getKeyForAutomaticLookahead(dslMethodIdx, prodOccurrence)\n let firstAfterRepInfo = this.firstAfterRepMap[key]\n if (firstAfterRepInfo === undefined) {\n const currRuleName = this.getCurrRuleFullName()\n const ruleGrammar = this.getGAstProductions()[currRuleName]\n const walker = new nextToksWalker(ruleGrammar, prodOccurrence)\n firstAfterRepInfo = walker.startWalking()\n this.firstAfterRepMap[key] = firstAfterRepInfo\n }\n let expectTokAfterLastMatch = firstAfterRepInfo.token\n let nextTokIdx = firstAfterRepInfo.occurrence\n const isEndOfRule = firstAfterRepInfo.isEndOfRule\n // special edge case of a TOP most repetition after which the input should END.\n // this will force an attempt for inRule recovery in that scenario.\n if (this.RULE_STACK.length === 1 && isEndOfRule && expectTokAfterLastMatch === undefined) {\n expectTokAfterLastMatch = EOF\n nextTokIdx = 1\n }\n // We don't have anything to re-sync to...\n // this condition was extracted from `shouldInRepetitionRecoveryBeTried` to act as a type-guard\n if (expectTokAfterLastMatch === undefined || nextTokIdx === undefined) {\n return\n }\n if (this.shouldInRepetitionRecoveryBeTried(expectTokAfterLastMatch, nextTokIdx, notStuck)) {\n // TODO: performance optimization: instead of passing the original args here, we modify\n // the args param (or create a new one) and make sure the lookahead func is explicitly provided\n // to avoid searching the cache for it once more.\n this.tryInRepetitionRecovery(prodFunc, args, lookaheadFunc, expectTokAfterLastMatch)\n }\n }\n\n // Lookahead keys are 32Bit integers in the form\n // TTTTTTTT-ZZZZZZZZZZZZ-YYYY-XXXXXXXX\n // XXXX -> Occurrence Index bitmap.\n // YYYY -> DSL Method Type bitmap.\n // ZZZZZZZZZZZZZZZ -> Rule short Index bitmap.\n // TTTTTTTTT -> alternation alternative index bitmap\n const BITS_FOR_METHOD_TYPE = 4\n const BITS_FOR_OCCURRENCE_IDX = 8\n // short string used as part of mapping keys.\n // being short improves the performance when composing KEYS for maps out of these\n // The 5 - 8 bits (16 possible values, are reserved for the DSL method indices)\n const OR_IDX = 1 << BITS_FOR_OCCURRENCE_IDX\n const OPTION_IDX = 2 << BITS_FOR_OCCURRENCE_IDX\n const MANY_IDX = 3 << BITS_FOR_OCCURRENCE_IDX\n const AT_LEAST_ONE_IDX = 4 << BITS_FOR_OCCURRENCE_IDX\n const MANY_SEP_IDX = 5 << BITS_FOR_OCCURRENCE_IDX\n const AT_LEAST_ONE_SEP_IDX = 6 << BITS_FOR_OCCURRENCE_IDX\n // this actually returns a number, but it is always used as a string (object prop key)\n function getKeyForAutomaticLookahead(ruleIdx, dslMethodIdx, occurrence) {\n return occurrence | dslMethodIdx | ruleIdx\n }\n\n class LLkLookaheadStrategy {\n constructor(options) {\n var _a\n this.maxLookahead =\n (_a = options === null || options === void 0 ? void 0 : options.maxLookahead) !== null && _a !== void 0\n ? _a\n : DEFAULT_PARSER_CONFIG.maxLookahead\n }\n validate(options) {\n const leftRecursionErrors = this.validateNoLeftRecursion(options.rules)\n if (isEmpty(leftRecursionErrors)) {\n const emptyAltErrors = this.validateEmptyOrAlternatives(options.rules)\n const ambiguousAltsErrors = this.validateAmbiguousAlternationAlternatives(options.rules, this.maxLookahead)\n const emptyRepetitionErrors = this.validateSomeNonEmptyLookaheadPath(options.rules, this.maxLookahead)\n const allErrors = [...leftRecursionErrors, ...emptyAltErrors, ...ambiguousAltsErrors, ...emptyRepetitionErrors]\n return allErrors\n }\n return leftRecursionErrors\n }\n validateNoLeftRecursion(rules) {\n return flatMap(rules, (currTopRule) =>\n validateNoLeftRecursion(currTopRule, currTopRule, defaultGrammarValidatorErrorProvider),\n )\n }\n validateEmptyOrAlternatives(rules) {\n return flatMap(rules, (currTopRule) =>\n validateEmptyOrAlternative(currTopRule, defaultGrammarValidatorErrorProvider),\n )\n }\n validateAmbiguousAlternationAlternatives(rules, maxLookahead) {\n return flatMap(rules, (currTopRule) =>\n validateAmbiguousAlternationAlternatives(currTopRule, maxLookahead, defaultGrammarValidatorErrorProvider),\n )\n }\n validateSomeNonEmptyLookaheadPath(rules, maxLookahead) {\n return validateSomeNonEmptyLookaheadPath(rules, maxLookahead, defaultGrammarValidatorErrorProvider)\n }\n buildLookaheadForAlternation(options) {\n return buildLookaheadFuncForOr(\n options.prodOccurrence,\n options.rule,\n options.maxLookahead,\n options.hasPredicates,\n options.dynamicTokensEnabled,\n buildAlternativesLookAheadFunc,\n )\n }\n buildLookaheadForOptional(options) {\n return buildLookaheadFuncForOptionalProd(\n options.prodOccurrence,\n options.rule,\n options.maxLookahead,\n options.dynamicTokensEnabled,\n getProdType(options.prodType),\n buildSingleAlternativeLookaheadFunction,\n )\n }\n }\n\n /**\n * Trait responsible for the lookahead related utilities and optimizations.\n */\n class LooksAhead {\n initLooksAhead(config) {\n this.dynamicTokensEnabled = has(config, 'dynamicTokensEnabled')\n ? config.dynamicTokensEnabled // assumes end user provides the correct config value/type\n : DEFAULT_PARSER_CONFIG.dynamicTokensEnabled\n this.maxLookahead = has(config, 'maxLookahead')\n ? config.maxLookahead // assumes end user provides the correct config value/type\n : DEFAULT_PARSER_CONFIG.maxLookahead\n this.lookaheadStrategy = has(config, 'lookaheadStrategy')\n ? config.lookaheadStrategy // assumes end user provides the correct config value/type\n : new LLkLookaheadStrategy({ maxLookahead: this.maxLookahead })\n this.lookAheadFuncsCache = new Map()\n }\n preComputeLookaheadFunctions(rules) {\n forEach(rules, (currRule) => {\n this.TRACE_INIT(`${currRule.name} Rule Lookahead`, () => {\n const {\n alternation,\n repetition,\n option,\n repetitionMandatory,\n repetitionMandatoryWithSeparator,\n repetitionWithSeparator,\n } = collectMethods(currRule)\n forEach(alternation, (currProd) => {\n const prodIdx = currProd.idx === 0 ? '' : currProd.idx\n this.TRACE_INIT(`${getProductionDslName(currProd)}${prodIdx}`, () => {\n const laFunc = this.lookaheadStrategy.buildLookaheadForAlternation({\n prodOccurrence: currProd.idx,\n rule: currRule,\n maxLookahead: currProd.maxLookahead || this.maxLookahead,\n hasPredicates: currProd.hasPredicates,\n dynamicTokensEnabled: this.dynamicTokensEnabled,\n })\n const key = getKeyForAutomaticLookahead(this.fullRuleNameToShort[currRule.name], OR_IDX, currProd.idx)\n this.setLaFuncCache(key, laFunc)\n })\n })\n forEach(repetition, (currProd) => {\n this.computeLookaheadFunc(\n currRule,\n currProd.idx,\n MANY_IDX,\n 'Repetition',\n currProd.maxLookahead,\n getProductionDslName(currProd),\n )\n })\n forEach(option, (currProd) => {\n this.computeLookaheadFunc(\n currRule,\n currProd.idx,\n OPTION_IDX,\n 'Option',\n currProd.maxLookahead,\n getProductionDslName(currProd),\n )\n })\n forEach(repetitionMandatory, (currProd) => {\n this.computeLookaheadFunc(\n currRule,\n currProd.idx,\n AT_LEAST_ONE_IDX,\n 'RepetitionMandatory',\n currProd.maxLookahead,\n getProductionDslName(currProd),\n )\n })\n forEach(repetitionMandatoryWithSeparator, (currProd) => {\n this.computeLookaheadFunc(\n currRule,\n currProd.idx,\n AT_LEAST_ONE_SEP_IDX,\n 'RepetitionMandatoryWithSeparator',\n currProd.maxLookahead,\n getProductionDslName(currProd),\n )\n })\n forEach(repetitionWithSeparator, (currProd) => {\n this.computeLookaheadFunc(\n currRule,\n currProd.idx,\n MANY_SEP_IDX,\n 'RepetitionWithSeparator',\n currProd.maxLookahead,\n getProductionDslName(currProd),\n )\n })\n })\n })\n }\n computeLookaheadFunc(rule, prodOccurrence, prodKey, prodType, prodMaxLookahead, dslMethodName) {\n this.TRACE_INIT(`${dslMethodName}${prodOccurrence === 0 ? '' : prodOccurrence}`, () => {\n const laFunc = this.lookaheadStrategy.buildLookaheadForOptional({\n prodOccurrence,\n rule,\n maxLookahead: prodMaxLookahead || this.maxLookahead,\n dynamicTokensEnabled: this.dynamicTokensEnabled,\n prodType,\n })\n const key = getKeyForAutomaticLookahead(this.fullRuleNameToShort[rule.name], prodKey, prodOccurrence)\n this.setLaFuncCache(key, laFunc)\n })\n }\n // this actually returns a number, but it is always used as a string (object prop key)\n getKeyForAutomaticLookahead(dslMethodIdx, occurrence) {\n const currRuleShortName = this.getLastExplicitRuleShortName()\n return getKeyForAutomaticLookahead(currRuleShortName, dslMethodIdx, occurrence)\n }\n getLaFuncFromCache(key) {\n return this.lookAheadFuncsCache.get(key)\n }\n /* istanbul ignore next */\n setLaFuncCache(key, value) {\n this.lookAheadFuncsCache.set(key, value)\n }\n }\n class DslMethodsCollectorVisitor extends GAstVisitor {\n constructor() {\n super(...arguments)\n this.dslMethods = {\n option: [],\n alternation: [],\n repetition: [],\n repetitionWithSeparator: [],\n repetitionMandatory: [],\n repetitionMandatoryWithSeparator: [],\n }\n }\n reset() {\n this.dslMethods = {\n option: [],\n alternation: [],\n repetition: [],\n repetitionWithSeparator: [],\n repetitionMandatory: [],\n repetitionMandatoryWithSeparator: [],\n }\n }\n visitOption(option) {\n this.dslMethods.option.push(option)\n }\n visitRepetitionWithSeparator(manySep) {\n this.dslMethods.repetitionWithSeparator.push(manySep)\n }\n visitRepetitionMandatory(atLeastOne) {\n this.dslMethods.repetitionMandatory.push(atLeastOne)\n }\n visitRepetitionMandatoryWithSeparator(atLeastOneSep) {\n this.dslMethods.repetitionMandatoryWithSeparator.push(atLeastOneSep)\n }\n visitRepetition(many) {\n this.dslMethods.repetition.push(many)\n }\n visitAlternation(or) {\n this.dslMethods.alternation.push(or)\n }\n }\n const collectorVisitor = new DslMethodsCollectorVisitor()\n function collectMethods(rule) {\n collectorVisitor.reset()\n rule.accept(collectorVisitor)\n const dslMethods = collectorVisitor.dslMethods\n // avoid uncleaned references\n collectorVisitor.reset()\n return dslMethods\n }\n\n /**\n * This nodeLocation tracking is not efficient and should only be used\n * when error recovery is enabled or the Token Vector contains virtual Tokens\n * (e.g, Python Indent/Outdent)\n * As it executes the calculation for every single terminal/nonTerminal\n * and does not rely on the fact the token vector is **sorted**\n */\n function setNodeLocationOnlyOffset(currNodeLocation, newLocationInfo) {\n // First (valid) update for this cst node\n if (isNaN(currNodeLocation.startOffset) === true) {\n // assumption1: Token location information is either NaN or a valid number\n // assumption2: Token location information is fully valid if it exist\n // (both start/end offsets exist and are numbers).\n currNodeLocation.startOffset = newLocationInfo.startOffset\n currNodeLocation.endOffset = newLocationInfo.endOffset\n }\n // Once the startOffset has been updated with a valid number it should never receive\n // any farther updates as the Token vector is sorted.\n // We still have to check this this condition for every new possible location info\n // because with error recovery enabled we may encounter invalid tokens (NaN location props)\n else if (currNodeLocation.endOffset < newLocationInfo.endOffset === true) {\n currNodeLocation.endOffset = newLocationInfo.endOffset\n }\n }\n /**\n * This nodeLocation tracking is not efficient and should only be used\n * when error recovery is enabled or the Token Vector contains virtual Tokens\n * (e.g, Python Indent/Outdent)\n * As it executes the calculation for every single terminal/nonTerminal\n * and does not rely on the fact the token vector is **sorted**\n */\n function setNodeLocationFull(currNodeLocation, newLocationInfo) {\n // First (valid) update for this cst node\n if (isNaN(currNodeLocation.startOffset) === true) {\n // assumption1: Token location information is either NaN or a valid number\n // assumption2: Token location information is fully valid if it exist\n // (all start/end props exist and are numbers).\n currNodeLocation.startOffset = newLocationInfo.startOffset\n currNodeLocation.startColumn = newLocationInfo.startColumn\n currNodeLocation.startLine = newLocationInfo.startLine\n currNodeLocation.endOffset = newLocationInfo.endOffset\n currNodeLocation.endColumn = newLocationInfo.endColumn\n currNodeLocation.endLine = newLocationInfo.endLine\n }\n // Once the start props has been updated with a valid number it should never receive\n // any farther updates as the Token vector is sorted.\n // We still have to check this this condition for every new possible location info\n // because with error recovery enabled we may encounter invalid tokens (NaN location props)\n else if (currNodeLocation.endOffset < newLocationInfo.endOffset === true) {\n currNodeLocation.endOffset = newLocationInfo.endOffset\n currNodeLocation.endColumn = newLocationInfo.endColumn\n currNodeLocation.endLine = newLocationInfo.endLine\n }\n }\n function addTerminalToCst(node, token, tokenTypeName) {\n if (node.children[tokenTypeName] === undefined) {\n node.children[tokenTypeName] = [token]\n } else {\n node.children[tokenTypeName].push(token)\n }\n }\n function addNoneTerminalToCst(node, ruleName, ruleResult) {\n if (node.children[ruleName] === undefined) {\n node.children[ruleName] = [ruleResult]\n } else {\n node.children[ruleName].push(ruleResult)\n }\n }\n\n const NAME = 'name'\n function defineNameProp(obj, nameValue) {\n Object.defineProperty(obj, NAME, {\n enumerable: false,\n configurable: true,\n writable: false,\n value: nameValue,\n })\n }\n\n function defaultVisit(ctx, param) {\n const childrenNames = keys(ctx)\n const childrenNamesLength = childrenNames.length\n for (let i = 0; i < childrenNamesLength; i++) {\n const currChildName = childrenNames[i]\n const currChildArray = ctx[currChildName]\n const currChildArrayLength = currChildArray.length\n for (let j = 0; j < currChildArrayLength; j++) {\n const currChild = currChildArray[j]\n // distinction between Tokens Children and CstNode children\n if (currChild.tokenTypeIdx === undefined) {\n this[currChild.name](currChild.children, param)\n }\n }\n }\n // defaultVisit does not support generic out param\n }\n function createBaseSemanticVisitorConstructor(grammarName, ruleNames) {\n const derivedConstructor = function () {}\n // can be overwritten according to:\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/\n // name?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FGlobal_Objects%2FFunction%2Fname\n defineNameProp(derivedConstructor, grammarName + 'BaseSemantics')\n const semanticProto = {\n visit: function (cstNode, param) {\n // enables writing more concise visitor methods when CstNode has only a single child\n if (isArray$1(cstNode)) {\n // A CST Node's children dictionary can never have empty arrays as values\n // If a key is defined there will be at least one element in the corresponding value array.\n cstNode = cstNode[0]\n }\n // enables passing optional CstNodes concisely.\n if (isUndefined(cstNode)) {\n return undefined\n }\n return this[cstNode.name](cstNode.children, param)\n },\n validateVisitor: function () {\n const semanticDefinitionErrors = validateVisitor(this, ruleNames)\n if (!isEmpty(semanticDefinitionErrors)) {\n const errorMessages = map(semanticDefinitionErrors, (currDefError) => currDefError.msg)\n throw Error(\n `Errors Detected in CST Visitor <${this.constructor.name}>:\\n\\t` +\n `${errorMessages.join('\\n\\n').replace(/\\n/g, '\\n\\t')}`,\n )\n }\n },\n }\n derivedConstructor.prototype = semanticProto\n derivedConstructor.prototype.constructor = derivedConstructor\n derivedConstructor._RULE_NAMES = ruleNames\n return derivedConstructor\n }\n function createBaseVisitorConstructorWithDefaults(grammarName, ruleNames, baseConstructor) {\n const derivedConstructor = function () {}\n // can be overwritten according to:\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/\n // name?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FGlobal_Objects%2FFunction%2Fname\n defineNameProp(derivedConstructor, grammarName + 'BaseSemanticsWithDefaults')\n const withDefaultsProto = Object.create(baseConstructor.prototype)\n forEach(ruleNames, (ruleName) => {\n withDefaultsProto[ruleName] = defaultVisit\n })\n derivedConstructor.prototype = withDefaultsProto\n derivedConstructor.prototype.constructor = derivedConstructor\n return derivedConstructor\n }\n var CstVisitorDefinitionError\n ;(function (CstVisitorDefinitionError) {\n CstVisitorDefinitionError[(CstVisitorDefinitionError['REDUNDANT_METHOD'] = 0)] = 'REDUNDANT_METHOD'\n CstVisitorDefinitionError[(CstVisitorDefinitionError['MISSING_METHOD'] = 1)] = 'MISSING_METHOD'\n })(CstVisitorDefinitionError || (CstVisitorDefinitionError = {}))\n function validateVisitor(visitorInstance, ruleNames) {\n const missingErrors = validateMissingCstMethods(visitorInstance, ruleNames)\n return missingErrors\n }\n function validateMissingCstMethods(visitorInstance, ruleNames) {\n const missingRuleNames = filter(ruleNames, (currRuleName) => {\n return isFunction(visitorInstance[currRuleName]) === false\n })\n const errors = map(missingRuleNames, (currRuleName) => {\n return {\n msg: `Missing visitor method: <${currRuleName}> on ${visitorInstance.constructor.name} CST Visitor.`,\n type: CstVisitorDefinitionError.MISSING_METHOD,\n methodName: currRuleName,\n }\n })\n return compact(errors)\n }\n\n /**\n * This trait is responsible for the CST building logic.\n */\n class TreeBuilder {\n initTreeBuilder(config) {\n this.CST_STACK = []\n // outputCst is no longer exposed/defined in the pubic API\n this.outputCst = config.outputCst\n this.nodeLocationTracking = has(config, 'nodeLocationTracking')\n ? config.nodeLocationTracking // assumes end user provides the correct config value/type\n : DEFAULT_PARSER_CONFIG.nodeLocationTracking\n if (!this.outputCst) {\n this.cstInvocationStateUpdate = noop\n this.cstFinallyStateUpdate = noop\n this.cstPostTerminal = noop\n this.cstPostNonTerminal = noop\n this.cstPostRule = noop\n } else {\n if (/full/i.test(this.nodeLocationTracking)) {\n if (this.recoveryEnabled) {\n this.setNodeLocationFromToken = setNodeLocationFull\n this.setNodeLocationFromNode = setNodeLocationFull\n this.cstPostRule = noop\n this.setInitialNodeLocation = this.setInitialNodeLocationFullRecovery\n } else {\n this.setNodeLocationFromToken = noop\n this.setNodeLocationFromNode = noop\n this.cstPostRule = this.cstPostRuleFull\n this.setInitialNodeLocation = this.setInitialNodeLocationFullRegular\n }\n } else if (/onlyOffset/i.test(this.nodeLocationTracking)) {\n if (this.recoveryEnabled) {\n this.setNodeLocationFromToken = setNodeLocationOnlyOffset\n this.setNodeLocationFromNode = setNodeLocationOnlyOffset\n this.cstPostRule = noop\n this.setInitialNodeLocation = this.setInitialNodeLocationOnlyOffsetRecovery\n } else {\n this.setNodeLocationFromToken = noop\n this.setNodeLocationFromNode = noop\n this.cstPostRule = this.cstPostRuleOnlyOffset\n this.setInitialNodeLocation = this.setInitialNodeLocationOnlyOffsetRegular\n }\n } else if (/none/i.test(this.nodeLocationTracking)) {\n this.setNodeLocationFromToken = noop\n this.setNodeLocationFromNode = noop\n this.cstPostRule = noop\n this.setInitialNodeLocation = noop\n } else {\n throw Error(`Invalid <nodeLocationTracking> config option: \"${config.nodeLocationTracking}\"`)\n }\n }\n }\n setInitialNodeLocationOnlyOffsetRecovery(cstNode) {\n cstNode.location = {\n startOffset: NaN,\n endOffset: NaN,\n }\n }\n setInitialNodeLocationOnlyOffsetRegular(cstNode) {\n cstNode.location = {\n // without error recovery the starting Location of a new CstNode is guaranteed\n // To be the next Token's startOffset (for valid inputs).\n // For invalid inputs there won't be any CSTOutput so this potential\n // inaccuracy does not matter\n startOffset: this.LA(1).startOffset,\n endOffset: NaN,\n }\n }\n setInitialNodeLocationFullRecovery(cstNode) {\n cstNode.location = {\n startOffset: NaN,\n startLine: NaN,\n startColumn: NaN,\n endOffset: NaN,\n endLine: NaN,\n endColumn: NaN,\n }\n }\n /**\n * @see setInitialNodeLocationOnlyOffsetRegular for explanation why this work\n \n * @param cstNode\n */\n setInitialNodeLocationFullRegular(cstNode) {\n const nextToken = this.LA(1)\n cstNode.location = {\n startOffset: nextToken.startOffset,\n startLine: nextToken.startLine,\n startColumn: nextToken.startColumn,\n endOffset: NaN,\n endLine: NaN,\n endColumn: NaN,\n }\n }\n cstInvocationStateUpdate(fullRuleName) {\n const cstNode = {\n name: fullRuleName,\n children: Object.create(null),\n }\n this.setInitialNodeLocation(cstNode)\n this.CST_STACK.push(cstNode)\n }\n cstFinallyStateUpdate() {\n this.CST_STACK.pop()\n }\n cstPostRuleFull(ruleCstNode) {\n // casts to `required<CstNodeLocation>` are safe because `cstPostRuleFull` should only be invoked when full location is enabled\n const prevToken = this.LA(0)\n const loc = ruleCstNode.location\n // If this condition is true it means we consumed at least one Token\n // In this CstNode.\n if (loc.startOffset <= prevToken.startOffset === true) {\n loc.endOffset = prevToken.endOffset\n loc.endLine = prevToken.endLine\n loc.endColumn = prevToken.endColumn\n }\n // \"empty\" CstNode edge case\n else {\n loc.startOffset = NaN\n loc.startLine = NaN\n loc.startColumn = NaN\n }\n }\n cstPostRuleOnlyOffset(ruleCstNode) {\n const prevToken = this.LA(0)\n // `location' is not null because `cstPostRuleOnlyOffset` will only be invoked when location tracking is enabled.\n const loc = ruleCstNode.location\n // If this condition is true it means we consumed at least one Token\n // In this CstNode.\n if (loc.startOffset <= prevToken.startOffset === true) {\n loc.endOffset = prevToken.endOffset\n }\n // \"empty\" CstNode edge case\n else {\n loc.startOffset = NaN\n }\n }\n cstPostTerminal(key, consumedToken) {\n const rootCst = this.CST_STACK[this.CST_STACK.length - 1]\n addTerminalToCst(rootCst, consumedToken, key)\n // This is only used when **both** error recovery and CST Output are enabled.\n this.setNodeLocationFromToken(rootCst.location, consumedToken)\n }\n cstPostNonTerminal(ruleCstResult, ruleName) {\n const preCstNode = this.CST_STACK[this.CST_STACK.length - 1]\n addNoneTerminalToCst(preCstNode, ruleName, ruleCstResult)\n // This is only used when **both** error recovery and CST Output are enabled.\n this.setNodeLocationFromNode(preCstNode.location, ruleCstResult.location)\n }\n getBaseCstVisitorConstructor() {\n if (isUndefined(this.baseCstVisitorConstructor)) {\n const newBaseCstVisitorConstructor = createBaseSemanticVisitorConstructor(\n this.className,\n keys(this.gastProductionsCache),\n )\n this.baseCstVisitorConstructor = newBaseCstVisitorConstructor\n return newBaseCstVisitorConstructor\n }\n return this.baseCstVisitorConstructor\n }\n getBaseCstVisitorConstructorWithDefaults() {\n if (isUndefined(this.baseCstVisitorWithDefaultsConstructor)) {\n const newConstructor = createBaseVisitorConstructorWithDefaults(\n this.className,\n keys(this.gastProductionsCache),\n this.getBaseCstVisitorConstructor(),\n )\n this.baseCstVisitorWithDefaultsConstructor = newConstructor\n return newConstructor\n }\n return this.baseCstVisitorWithDefaultsConstructor\n }\n getLastExplicitRuleShortName() {\n const ruleStack = this.RULE_STACK\n return ruleStack[ruleStack.length - 1]\n }\n getPreviousExplicitRuleShortName() {\n const ruleStack = this.RULE_STACK\n return ruleStack[ruleStack.length - 2]\n }\n getLastExplicitRuleOccurrenceIndex() {\n const occurrenceStack = this.RULE_OCCURRENCE_STACK\n return occurrenceStack[occurrenceStack.length - 1]\n }\n }\n\n /**\n * Trait responsible abstracting over the interaction with Lexer output (Token vector).\n *\n * This could be generalized to support other kinds of lexers, e.g.\n * - Just in Time Lexing / Lexer-Less parsing.\n * - Streaming Lexer.\n */\n class LexerAdapter {\n initLexerAdapter() {\n this.tokVector = []\n this.tokVectorLength = 0\n this.currIdx = -1\n }\n set input(newInput) {\n // @ts-ignore - `this parameter` not supported in setters/getters\n // - https://www.typescriptlang.org/docs/handbook/functions.html#this-parameters\n if (this.selfAnalysisDone !== true) {\n throw Error(`Missing <performSelfAnalysis> invocation at the end of the Parser's constructor.`)\n }\n // @ts-ignore - `this parameter` not supported in setters/getters\n // - https://www.typescriptlang.org/docs/handbook/functions.html#this-parameters\n this.reset()\n this.tokVector = newInput\n this.tokVectorLength = newInput.length\n }\n get input() {\n return this.tokVector\n }\n // skips a token and returns the next token\n SKIP_TOKEN() {\n if (this.currIdx <= this.tokVector.length - 2) {\n this.consumeToken()\n return this.LA(1)\n } else {\n return END_OF_FILE\n }\n }\n // Lexer (accessing Token vector) related methods which can be overridden to implement lazy lexers\n // or lexers dependent on parser context.\n LA(howMuch) {\n const soughtIdx = this.currIdx + howMuch\n if (soughtIdx < 0 || this.tokVectorLength <= soughtIdx) {\n return END_OF_FILE\n } else {\n return this.tokVector[soughtIdx]\n }\n }\n consumeToken() {\n this.currIdx++\n }\n exportLexerState() {\n return this.currIdx\n }\n importLexerState(newState) {\n this.currIdx = newState\n }\n resetLexerState() {\n this.currIdx = -1\n }\n moveToTerminatedState() {\n this.currIdx = this.tokVector.length - 1\n }\n getLexerPosition() {\n return this.exportLexerState()\n }\n }\n\n /**\n * This trait is responsible for implementing the public API\n * for defining Chevrotain parsers, i.e:\n * - CONSUME\n * - RULE\n * - OPTION\n * - ...\n */\n class RecognizerApi {\n ACTION(impl) {\n return impl.call(this)\n }\n consume(idx, tokType, options) {\n return this.consumeInternal(tokType, idx, options)\n }\n subrule(idx, ruleToCall, options) {\n return this.subruleInternal(ruleToCall, idx, options)\n }\n option(idx, actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, idx)\n }\n or(idx, altsOrOpts) {\n return this.orInternal(altsOrOpts, idx)\n }\n many(idx, actionORMethodDef) {\n return this.manyInternal(idx, actionORMethodDef)\n }\n atLeastOne(idx, actionORMethodDef) {\n return this.atLeastOneInternal(idx, actionORMethodDef)\n }\n CONSUME(tokType, options) {\n return this.consumeInternal(tokType, 0, options)\n }\n CONSUME1(tokType, options) {\n return this.consumeInternal(tokType, 1, options)\n }\n CONSUME2(tokType, options) {\n return this.consumeInternal(tokType, 2, options)\n }\n CONSUME3(tokType, options) {\n return this.consumeInternal(tokType, 3, options)\n }\n CONSUME4(tokType, options) {\n return this.consumeInternal(tokType, 4, options)\n }\n CONSUME5(tokType, options) {\n return this.consumeInternal(tokType, 5, options)\n }\n CONSUME6(tokType, options) {\n return this.consumeInternal(tokType, 6, options)\n }\n CONSUME7(tokType, options) {\n return this.consumeInternal(tokType, 7, options)\n }\n CONSUME8(tokType, options) {\n return this.consumeInternal(tokType, 8, options)\n }\n CONSUME9(tokType, options) {\n return this.consumeInternal(tokType, 9, options)\n }\n SUBRULE(ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 0, options)\n }\n SUBRULE1(ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 1, options)\n }\n SUBRULE2(ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 2, options)\n }\n SUBRULE3(ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 3, options)\n }\n SUBRULE4(ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 4, options)\n }\n SUBRULE5(ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 5, options)\n }\n SUBRULE6(ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 6, options)\n }\n SUBRULE7(ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 7, options)\n }\n SUBRULE8(ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 8, options)\n }\n SUBRULE9(ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 9, options)\n }\n OPTION(actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 0)\n }\n OPTION1(actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 1)\n }\n OPTION2(actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 2)\n }\n OPTION3(actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 3)\n }\n OPTION4(actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 4)\n }\n OPTION5(actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 5)\n }\n OPTION6(actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 6)\n }\n OPTION7(actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 7)\n }\n OPTION8(actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 8)\n }\n OPTION9(actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 9)\n }\n OR(altsOrOpts) {\n return this.orInternal(altsOrOpts, 0)\n }\n OR1(altsOrOpts) {\n return this.orInternal(altsOrOpts, 1)\n }\n OR2(altsOrOpts) {\n return this.orInternal(altsOrOpts, 2)\n }\n OR3(altsOrOpts) {\n return this.orInternal(altsOrOpts, 3)\n }\n OR4(altsOrOpts) {\n return this.orInternal(altsOrOpts, 4)\n }\n OR5(altsOrOpts) {\n return this.orInternal(altsOrOpts, 5)\n }\n OR6(altsOrOpts) {\n return this.orInternal(altsOrOpts, 6)\n }\n OR7(altsOrOpts) {\n return this.orInternal(altsOrOpts, 7)\n }\n OR8(altsOrOpts) {\n return this.orInternal(altsOrOpts, 8)\n }\n OR9(altsOrOpts) {\n return this.orInternal(altsOrOpts, 9)\n }\n MANY(actionORMethodDef) {\n this.manyInternal(0, actionORMethodDef)\n }\n MANY1(actionORMethodDef) {\n this.manyInternal(1, actionORMethodDef)\n }\n MANY2(actionORMethodDef) {\n this.manyInternal(2, actionORMethodDef)\n }\n MANY3(actionORMethodDef) {\n this.manyInternal(3, actionORMethodDef)\n }\n MANY4(actionORMethodDef) {\n this.manyInternal(4, actionORMethodDef)\n }\n MANY5(actionORMethodDef) {\n this.manyInternal(5, actionORMethodDef)\n }\n MANY6(actionORMethodDef) {\n this.manyInternal(6, actionORMethodDef)\n }\n MANY7(actionORMethodDef) {\n this.manyInternal(7, actionORMethodDef)\n }\n MANY8(actionORMethodDef) {\n this.manyInternal(8, actionORMethodDef)\n }\n MANY9(actionORMethodDef) {\n this.manyInternal(9, actionORMethodDef)\n }\n MANY_SEP(options) {\n this.manySepFirstInternal(0, options)\n }\n MANY_SEP1(options) {\n this.manySepFirstInternal(1, options)\n }\n MANY_SEP2(options) {\n this.manySepFirstInternal(2, options)\n }\n MANY_SEP3(options) {\n this.manySepFirstInternal(3, options)\n }\n MANY_SEP4(options) {\n this.manySepFirstInternal(4, options)\n }\n MANY_SEP5(options) {\n this.manySepFirstInternal(5, options)\n }\n MANY_SEP6(options) {\n this.manySepFirstInternal(6, options)\n }\n MANY_SEP7(options) {\n this.manySepFirstInternal(7, options)\n }\n MANY_SEP8(options) {\n this.manySepFirstInternal(8, options)\n }\n MANY_SEP9(options) {\n this.manySepFirstInternal(9, options)\n }\n AT_LEAST_ONE(actionORMethodDef) {\n this.atLeastOneInternal(0, actionORMethodDef)\n }\n AT_LEAST_ONE1(actionORMethodDef) {\n return this.atLeastOneInternal(1, actionORMethodDef)\n }\n AT_LEAST_ONE2(actionORMethodDef) {\n this.atLeastOneInternal(2, actionORMethodDef)\n }\n AT_LEAST_ONE3(actionORMethodDef) {\n this.atLeastOneInternal(3, actionORMethodDef)\n }\n AT_LEAST_ONE4(actionORMethodDef) {\n this.atLeastOneInternal(4, actionORMethodDef)\n }\n AT_LEAST_ONE5(actionORMethodDef) {\n this.atLeastOneInternal(5, actionORMethodDef)\n }\n AT_LEAST_ONE6(actionORMethodDef) {\n this.atLeastOneInternal(6, actionORMethodDef)\n }\n AT_LEAST_ONE7(actionORMethodDef) {\n this.atLeastOneInternal(7, actionORMethodDef)\n }\n AT_LEAST_ONE8(actionORMethodDef) {\n this.atLeastOneInternal(8, actionORMethodDef)\n }\n AT_LEAST_ONE9(actionORMethodDef) {\n this.atLeastOneInternal(9, actionORMethodDef)\n }\n AT_LEAST_ONE_SEP(options) {\n this.atLeastOneSepFirstInternal(0, options)\n }\n AT_LEAST_ONE_SEP1(options) {\n this.atLeastOneSepFirstInternal(1, options)\n }\n AT_LEAST_ONE_SEP2(options) {\n this.atLeastOneSepFirstInternal(2, options)\n }\n AT_LEAST_ONE_SEP3(options) {\n this.atLeastOneSepFirstInternal(3, options)\n }\n AT_LEAST_ONE_SEP4(options) {\n this.atLeastOneSepFirstInternal(4, options)\n }\n AT_LEAST_ONE_SEP5(options) {\n this.atLeastOneSepFirstInternal(5, options)\n }\n AT_LEAST_ONE_SEP6(options) {\n this.atLeastOneSepFirstInternal(6, options)\n }\n AT_LEAST_ONE_SEP7(options) {\n this.atLeastOneSepFirstInternal(7, options)\n }\n AT_LEAST_ONE_SEP8(options) {\n this.atLeastOneSepFirstInternal(8, options)\n }\n AT_LEAST_ONE_SEP9(options) {\n this.atLeastOneSepFirstInternal(9, options)\n }\n RULE(name, implementation, config = DEFAULT_RULE_CONFIG) {\n if (includes(this.definedRulesNames, name)) {\n const errMsg = defaultGrammarValidatorErrorProvider.buildDuplicateRuleNameError({\n topLevelRule: name,\n grammarName: this.className,\n })\n const error = {\n message: errMsg,\n type: ParserDefinitionErrorType.DUPLICATE_RULE_NAME,\n ruleName: name,\n }\n this.definitionErrors.push(error)\n }\n this.definedRulesNames.push(name)\n const ruleImplementation = this.defineRule(name, implementation, config)\n this[name] = ruleImplementation\n return ruleImplementation\n }\n OVERRIDE_RULE(name, impl, config = DEFAULT_RULE_CONFIG) {\n const ruleErrors = validateRuleIsOverridden(name, this.definedRulesNames, this.className)\n this.definitionErrors = this.definitionErrors.concat(ruleErrors)\n const ruleImplementation = this.defineRule(name, impl, config)\n this[name] = ruleImplementation\n return ruleImplementation\n }\n BACKTRACK(grammarRule, args) {\n return function () {\n // save org state\n this.isBackTrackingStack.push(1)\n const orgState = this.saveRecogState()\n try {\n grammarRule.apply(this, args)\n // if no exception was thrown we have succeed parsing the rule.\n return true\n } catch (e) {\n if (isRecognitionException(e)) {\n return false\n } else {\n throw e\n }\n } finally {\n this.reloadRecogState(orgState)\n this.isBackTrackingStack.pop()\n }\n }\n }\n // GAST export APIs\n getGAstProductions() {\n return this.gastProductionsCache\n }\n getSerializedGastProductions() {\n return serializeGrammar(values(this.gastProductionsCache))\n }\n }\n\n /**\n * This trait is responsible for the runtime parsing engine\n * Used by the official API (recognizer_api.ts)\n */\n class RecognizerEngine {\n initRecognizerEngine(tokenVocabulary, config) {\n this.className = this.constructor.name\n // TODO: would using an ES6 Map or plain object be faster (CST building scenario)\n this.shortRuleNameToFull = {}\n this.fullRuleNameToShort = {}\n this.ruleShortNameIdx = 256\n this.tokenMatcher = tokenStructuredMatcherNoCategories\n this.subruleIdx = 0\n this.definedRulesNames = []\n this.tokensMap = {}\n this.isBackTrackingStack = []\n this.RULE_STACK = []\n this.RULE_OCCURRENCE_STACK = []\n this.gastProductionsCache = {}\n if (has(config, 'serializedGrammar')) {\n throw Error(\n \"The Parser's configuration can no longer contain a <serializedGrammar> property.\\n\" +\n '\\tSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0\\n' +\n '\\tFor Further details.',\n )\n }\n if (isArray$1(tokenVocabulary)) {\n // This only checks for Token vocabularies provided as arrays.\n // That is good enough because the main objective is to detect users of pre-V4.0 APIs\n // rather than all edge cases of empty Token vocabularies.\n if (isEmpty(tokenVocabulary)) {\n throw Error(\n 'A Token Vocabulary cannot be empty.\\n' +\n '\\tNote that the first argument for the parser constructor\\n' +\n '\\tis no longer a Token vector (since v4.0).',\n )\n }\n if (typeof tokenVocabulary[0].startOffset === 'number') {\n throw Error(\n 'The Parser constructor no longer accepts a token vector as the first argument.\\n' +\n '\\tSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0\\n' +\n '\\tFor Further details.',\n )\n }\n }\n if (isArray$1(tokenVocabulary)) {\n this.tokensMap = reduce(\n tokenVocabulary,\n (acc, tokType) => {\n acc[tokType.name] = tokType\n return acc\n },\n {},\n )\n } else if (has(tokenVocabulary, 'modes') && every(flatten(values(tokenVocabulary.modes)), isTokenType)) {\n const allTokenTypes = flatten(values(tokenVocabulary.modes))\n const uniqueTokens = uniq(allTokenTypes)\n this.tokensMap = reduce(\n uniqueTokens,\n (acc, tokType) => {\n acc[tokType.name] = tokType\n return acc\n },\n {},\n )\n } else if (isObject(tokenVocabulary)) {\n this.tokensMap = clone(tokenVocabulary)\n } else {\n throw new Error(\n '<tokensDictionary> argument must be An Array of Token constructors,' +\n ' A dictionary of Token constructors or an IMultiModeLexerDefinition',\n )\n }\n // always add EOF to the tokenNames -> constructors map. it is useful to assure all the input has been\n // parsed with a clear error message (\"expecting EOF but found ...\")\n this.tokensMap['EOF'] = EOF\n const allTokenTypes = has(tokenVocabulary, 'modes')\n ? flatten(values(tokenVocabulary.modes))\n : values(tokenVocabulary)\n const noTokenCategoriesUsed = every(allTokenTypes, (tokenConstructor) =>\n isEmpty(tokenConstructor.categoryMatches),\n )\n this.tokenMatcher = noTokenCategoriesUsed ? tokenStructuredMatcherNoCategories : tokenStructuredMatcher\n // Because ES2015+ syntax should be supported for creating Token classes\n // We cannot assume that the Token classes were created using the \"extendToken\" utilities\n // Therefore we must augment the Token classes both on Lexer initialization and on Parser initialization\n augmentTokenTypes(values(this.tokensMap))\n }\n defineRule(ruleName, impl, config) {\n if (this.selfAnalysisDone) {\n throw Error(\n `Grammar rule <${ruleName}> may not be defined after the 'performSelfAnalysis' method has been called'\\n` +\n `Make sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`,\n )\n }\n const resyncEnabled = has(config, 'resyncEnabled')\n ? config.resyncEnabled // assumes end user provides the correct config value/type\n : DEFAULT_RULE_CONFIG.resyncEnabled\n const recoveryValueFunc = has(config, 'recoveryValueFunc')\n ? config.recoveryValueFunc // assumes end user provides the correct config value/type\n : DEFAULT_RULE_CONFIG.recoveryValueFunc\n // performance optimization: Use small integers as keys for the longer human readable \"full\" rule names.\n // this greatly improves Map access time (as much as 8% for some performance benchmarks).\n const shortName = this.ruleShortNameIdx << (BITS_FOR_METHOD_TYPE + BITS_FOR_OCCURRENCE_IDX)\n this.ruleShortNameIdx++\n this.shortRuleNameToFull[shortName] = ruleName\n this.fullRuleNameToShort[ruleName] = shortName\n let invokeRuleWithTry\n // Micro optimization, only check the condition **once** on rule definition\n // instead of **every single** rule invocation.\n if (this.outputCst === true) {\n invokeRuleWithTry = function invokeRuleWithTry(...args) {\n try {\n this.ruleInvocationStateUpdate(shortName, ruleName, this.subruleIdx)\n impl.apply(this, args)\n const cst = this.CST_STACK[this.CST_STACK.length - 1]\n this.cstPostRule(cst)\n return cst\n } catch (e) {\n return this.invokeRuleCatch(e, resyncEnabled, recoveryValueFunc)\n } finally {\n this.ruleFinallyStateUpdate()\n }\n }\n } else {\n invokeRuleWithTry = function invokeRuleWithTryCst(...args) {\n try {\n this.ruleInvocationStateUpdate(shortName, ruleName, this.subruleIdx)\n return impl.apply(this, args)\n } catch (e) {\n return this.invokeRuleCatch(e, resyncEnabled, recoveryValueFunc)\n } finally {\n this.ruleFinallyStateUpdate()\n }\n }\n }\n const wrappedGrammarRule = Object.assign(invokeRuleWithTry, { ruleName, originalGrammarAction: impl })\n return wrappedGrammarRule\n }\n invokeRuleCatch(e, resyncEnabledConfig, recoveryValueFunc) {\n const isFirstInvokedRule = this.RULE_STACK.length === 1\n // note the reSync is always enabled for the first rule invocation, because we must always be able to\n // reSync with EOF and just output some INVALID ParseTree\n // during backtracking reSync recovery is disabled, otherwise we can't be certain the backtracking\n // path is really the most valid one\n const reSyncEnabled = resyncEnabledConfig && !this.isBackTracking() && this.recoveryEnabled\n if (isRecognitionException(e)) {\n const recogError = e\n if (reSyncEnabled) {\n const reSyncTokType = this.findReSyncTokenType()\n if (this.isInCurrentRuleReSyncSet(reSyncTokType)) {\n recogError.resyncedTokens = this.reSyncTo(reSyncTokType)\n if (this.outputCst) {\n const partialCstResult = this.CST_STACK[this.CST_STACK.length - 1]\n partialCstResult.recoveredNode = true\n return partialCstResult\n } else {\n return recoveryValueFunc(e)\n }\n } else {\n if (this.outputCst) {\n const partialCstResult = this.CST_STACK[this.CST_STACK.length - 1]\n partialCstResult.recoveredNode = true\n recogError.partialCstResult = partialCstResult\n }\n // to be handled Further up the call stack\n throw recogError\n }\n } else if (isFirstInvokedRule) {\n // otherwise a Redundant input error will be created as well and we cannot guarantee that this is indeed the case\n this.moveToTerminatedState()\n // the parser should never throw one of its own errors outside its flow.\n // even if error recovery is disabled\n return recoveryValueFunc(e)\n } else {\n // to be recovered Further up the call stack\n throw recogError\n }\n } else {\n // some other Error type which we don't know how to handle (for example a built in JavaScript Error)\n throw e\n }\n }\n // Implementation of parsing DSL\n optionInternal(actionORMethodDef, occurrence) {\n const key = this.getKeyForAutomaticLookahead(OPTION_IDX, occurrence)\n return this.optionInternalLogic(actionORMethodDef, occurrence, key)\n }\n optionInternalLogic(actionORMethodDef, occurrence, key) {\n let lookAheadFunc = this.getLaFuncFromCache(key)\n let action\n if (typeof actionORMethodDef !== 'function') {\n action = actionORMethodDef.DEF\n const predicate = actionORMethodDef.GATE\n // predicate present\n if (predicate !== undefined) {\n const orgLookaheadFunction = lookAheadFunc\n lookAheadFunc = () => {\n return predicate.call(this) && orgLookaheadFunction.call(this)\n }\n }\n } else {\n action = actionORMethodDef\n }\n if (lookAheadFunc.call(this) === true) {\n return action.call(this)\n }\n return undefined\n }\n atLeastOneInternal(prodOccurrence, actionORMethodDef) {\n const laKey = this.getKeyForAutomaticLookahead(AT_LEAST_ONE_IDX, prodOccurrence)\n return this.atLeastOneInternalLogic(prodOccurrence, actionORMethodDef, laKey)\n }\n atLeastOneInternalLogic(prodOccurrence, actionORMethodDef, key) {\n let lookAheadFunc = this.getLaFuncFromCache(key)\n let action\n if (typeof actionORMethodDef !== 'function') {\n action = actionORMethodDef.DEF\n const predicate = actionORMethodDef.GATE\n // predicate present\n if (predicate !== undefined) {\n const orgLookaheadFunction = lookAheadFunc\n lookAheadFunc = () => {\n return predicate.call(this) && orgLookaheadFunction.call(this)\n }\n }\n } else {\n action = actionORMethodDef\n }\n if (lookAheadFunc.call(this) === true) {\n let notStuck = this.doSingleRepetition(action)\n while (lookAheadFunc.call(this) === true && notStuck === true) {\n notStuck = this.doSingleRepetition(action)\n }\n } else {\n throw this.raiseEarlyExitException(prodOccurrence, PROD_TYPE.REPETITION_MANDATORY, actionORMethodDef.ERR_MSG)\n }\n // note that while it may seem that this can cause an error because by using a recursive call to\n // AT_LEAST_ONE we change the grammar to AT_LEAST_TWO, AT_LEAST_THREE ... , the possible recursive call\n // from the tryInRepetitionRecovery(...) will only happen IFF there really are TWO/THREE/.... items.\n // Performance optimization: \"attemptInRepetitionRecovery\" will be defined as NOOP unless recovery is enabled\n this.attemptInRepetitionRecovery(\n this.atLeastOneInternal,\n [prodOccurrence, actionORMethodDef],\n lookAheadFunc,\n AT_LEAST_ONE_IDX,\n prodOccurrence,\n NextTerminalAfterAtLeastOneWalker,\n )\n }\n atLeastOneSepFirstInternal(prodOccurrence, options) {\n const laKey = this.getKeyForAutomaticLookahead(AT_LEAST_ONE_SEP_IDX, prodOccurrence)\n this.atLeastOneSepFirstInternalLogic(prodOccurrence, options, laKey)\n }\n atLeastOneSepFirstInternalLogic(prodOccurrence, options, key) {\n const action = options.DEF\n const separator = options.SEP\n const firstIterationLookaheadFunc = this.getLaFuncFromCache(key)\n // 1st iteration\n if (firstIterationLookaheadFunc.call(this) === true) {\n action.call(this)\n // TODO: Optimization can move this function construction into \"attemptInRepetitionRecovery\"\n // because it is only needed in error recovery scenarios.\n const separatorLookAheadFunc = () => {\n return this.tokenMatcher(this.LA(1), separator)\n }\n // 2nd..nth iterations\n while (this.tokenMatcher(this.LA(1), separator) === true) {\n // note that this CONSUME will never enter recovery because\n // the separatorLookAheadFunc checks that the separator really does exist.\n this.CONSUME(separator)\n // No need for checking infinite loop here due to consuming the separator.\n action.call(this)\n }\n // Performance optimization: \"attemptInRepetitionRecovery\" will be defined as NOOP unless recovery is enabled\n this.attemptInRepetitionRecovery(\n this.repetitionSepSecondInternal,\n [prodOccurrence, separator, separatorLookAheadFunc, action, NextTerminalAfterAtLeastOneSepWalker],\n separatorLookAheadFunc,\n AT_LEAST_ONE_SEP_IDX,\n prodOccurrence,\n NextTerminalAfterAtLeastOneSepWalker,\n )\n } else {\n throw this.raiseEarlyExitException(\n prodOccurrence,\n PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR,\n options.ERR_MSG,\n )\n }\n }\n manyInternal(prodOccurrence, actionORMethodDef) {\n const laKey = this.getKeyForAutomaticLookahead(MANY_IDX, prodOccurrence)\n return this.manyInternalLogic(prodOccurrence, actionORMethodDef, laKey)\n }\n manyInternalLogic(prodOccurrence, actionORMethodDef, key) {\n let lookaheadFunction = this.getLaFuncFromCache(key)\n let action\n if (typeof actionORMethodDef !== 'function') {\n action = actionORMethodDef.DEF\n const predicate = actionORMethodDef.GATE\n // predicate present\n if (predicate !== undefined) {\n const orgLookaheadFunction = lookaheadFunction\n lookaheadFunction = () => {\n return predicate.call(this) && orgLookaheadFunction.call(this)\n }\n }\n } else {\n action = actionORMethodDef\n }\n let notStuck = true\n while (lookaheadFunction.call(this) === true && notStuck === true) {\n notStuck = this.doSingleRepetition(action)\n }\n // Performance optimization: \"attemptInRepetitionRecovery\" will be defined as NOOP unless recovery is enabled\n this.attemptInRepetitionRecovery(\n this.manyInternal,\n [prodOccurrence, actionORMethodDef],\n lookaheadFunction,\n MANY_IDX,\n prodOccurrence,\n NextTerminalAfterManyWalker,\n // The notStuck parameter is only relevant when \"attemptInRepetitionRecovery\"\n // is invoked from manyInternal, in the MANY_SEP case and AT_LEAST_ONE[_SEP]\n // An infinite loop cannot occur as:\n // - Either the lookahead is guaranteed to consume something (Single Token Separator)\n // - AT_LEAST_ONE by definition is guaranteed to consume something (or error out).\n notStuck,\n )\n }\n manySepFirstInternal(prodOccurrence, options) {\n const laKey = this.getKeyForAutomaticLookahead(MANY_SEP_IDX, prodOccurrence)\n this.manySepFirstInternalLogic(prodOccurrence, options, laKey)\n }\n manySepFirstInternalLogic(prodOccurrence, options, key) {\n const action = options.DEF\n const separator = options.SEP\n const firstIterationLaFunc = this.getLaFuncFromCache(key)\n // 1st iteration\n if (firstIterationLaFunc.call(this) === true) {\n action.call(this)\n const separatorLookAheadFunc = () => {\n return this.tokenMatcher(this.LA(1), separator)\n }\n // 2nd..nth iterations\n while (this.tokenMatcher(this.LA(1), separator) === true) {\n // note that this CONSUME will never enter recovery because\n // the separatorLookAheadFunc checks that the separator really does exist.\n this.CONSUME(separator)\n // No need for checking infinite loop here due to consuming the separator.\n action.call(this)\n }\n // Performance optimization: \"attemptInRepetitionRecovery\" will be defined as NOOP unless recovery is enabled\n this.attemptInRepetitionRecovery(\n this.repetitionSepSecondInternal,\n [prodOccurrence, separator, separatorLookAheadFunc, action, NextTerminalAfterManySepWalker],\n separatorLookAheadFunc,\n MANY_SEP_IDX,\n prodOccurrence,\n NextTerminalAfterManySepWalker,\n )\n }\n }\n repetitionSepSecondInternal(prodOccurrence, separator, separatorLookAheadFunc, action, nextTerminalAfterWalker) {\n while (separatorLookAheadFunc()) {\n // note that this CONSUME will never enter recovery because\n // the separatorLookAheadFunc checks that the separator really does exist.\n this.CONSUME(separator)\n action.call(this)\n }\n // we can only arrive to this function after an error\n // has occurred (hence the name 'second') so the following\n // IF will always be entered, its possible to remove it...\n // however it is kept to avoid confusion and be consistent.\n // Performance optimization: \"attemptInRepetitionRecovery\" will be defined as NOOP unless recovery is enabled\n /* istanbul ignore else */\n this.attemptInRepetitionRecovery(\n this.repetitionSepSecondInternal,\n [prodOccurrence, separator, separatorLookAheadFunc, action, nextTerminalAfterWalker],\n separatorLookAheadFunc,\n AT_LEAST_ONE_SEP_IDX,\n prodOccurrence,\n nextTerminalAfterWalker,\n )\n }\n doSingleRepetition(action) {\n const beforeIteration = this.getLexerPosition()\n action.call(this)\n const afterIteration = this.getLexerPosition()\n // This boolean will indicate if this repetition progressed\n // or if we are \"stuck\" (potential infinite loop in the repetition).\n return afterIteration > beforeIteration\n }\n orInternal(altsOrOpts, occurrence) {\n const laKey = this.getKeyForAutomaticLookahead(OR_IDX, occurrence)\n const alts = isArray$1(altsOrOpts) ? altsOrOpts : altsOrOpts.DEF\n const laFunc = this.getLaFuncFromCache(laKey)\n const altIdxToTake = laFunc.call(this, alts)\n if (altIdxToTake !== undefined) {\n const chosenAlternative = alts[altIdxToTake]\n return chosenAlternative.ALT.call(this)\n }\n this.raiseNoAltException(occurrence, altsOrOpts.ERR_MSG)\n }\n ruleFinallyStateUpdate() {\n this.RULE_STACK.pop()\n this.RULE_OCCURRENCE_STACK.pop()\n // NOOP when cst is disabled\n this.cstFinallyStateUpdate()\n if (this.RULE_STACK.length === 0 && this.isAtEndOfInput() === false) {\n const firstRedundantTok = this.LA(1)\n const errMsg = this.errorMessageProvider.buildNotAllInputParsedMessage({\n firstRedundant: firstRedundantTok,\n ruleName: this.getCurrRuleFullName(),\n })\n this.SAVE_ERROR(new NotAllInputParsedException(errMsg, firstRedundantTok))\n }\n }\n subruleInternal(ruleToCall, idx, options) {\n let ruleResult\n try {\n const args = options !== undefined ? options.ARGS : undefined\n this.subruleIdx = idx\n ruleResult = ruleToCall.apply(this, args)\n this.cstPostNonTerminal(\n ruleResult,\n options !== undefined && options.LABEL !== undefined ? options.LABEL : ruleToCall.ruleName,\n )\n return ruleResult\n } catch (e) {\n throw this.subruleInternalError(e, options, ruleToCall.ruleName)\n }\n }\n subruleInternalError(e, options, ruleName) {\n if (isRecognitionException(e) && e.partialCstResult !== undefined) {\n this.cstPostNonTerminal(\n e.partialCstResult,\n options !== undefined && options.LABEL !== undefined ? options.LABEL : ruleName,\n )\n delete e.partialCstResult\n }\n throw e\n }\n consumeInternal(tokType, idx, options) {\n let consumedToken\n try {\n const nextToken = this.LA(1)\n if (this.tokenMatcher(nextToken, tokType) === true) {\n this.consumeToken()\n consumedToken = nextToken\n } else {\n this.consumeInternalError(tokType, nextToken, options)\n }\n } catch (eFromConsumption) {\n consumedToken = this.consumeInternalRecovery(tokType, idx, eFromConsumption)\n }\n this.cstPostTerminal(\n options !== undefined && options.LABEL !== undefined ? options.LABEL : tokType.name,\n consumedToken,\n )\n return consumedToken\n }\n consumeInternalError(tokType, nextToken, options) {\n let msg\n const previousToken = this.LA(0)\n if (options !== undefined && options.ERR_MSG) {\n msg = options.ERR_MSG\n } else {\n msg = this.errorMessageProvider.buildMismatchTokenMessage({\n expected: tokType,\n actual: nextToken,\n previous: previousToken,\n ruleName: this.getCurrRuleFullName(),\n })\n }\n throw this.SAVE_ERROR(new MismatchedTokenException(msg, nextToken, previousToken))\n }\n consumeInternalRecovery(tokType, idx, eFromConsumption) {\n // no recovery allowed during backtracking, otherwise backtracking may recover invalid syntax and accept it\n // but the original syntax could have been parsed successfully without any backtracking + recovery\n if (\n this.recoveryEnabled &&\n // TODO: more robust checking of the exception type. Perhaps Typescript extending expressions?\n eFromConsumption.name === 'MismatchedTokenException' &&\n !this.isBackTracking()\n ) {\n const follows = this.getFollowsForInRuleRecovery(tokType, idx)\n try {\n return this.tryInRuleRecovery(tokType, follows)\n } catch (eFromInRuleRecovery) {\n if (eFromInRuleRecovery.name === IN_RULE_RECOVERY_EXCEPTION) {\n // failed in RuleRecovery.\n // throw the original error in order to trigger reSync error recovery\n throw eFromConsumption\n } else {\n throw eFromInRuleRecovery\n }\n }\n } else {\n throw eFromConsumption\n }\n }\n saveRecogState() {\n // errors is a getter which will clone the errors array\n const savedErrors = this.errors\n const savedRuleStack = clone(this.RULE_STACK)\n return {\n errors: savedErrors,\n lexerState: this.exportLexerState(),\n RULE_STACK: savedRuleStack,\n CST_STACK: this.CST_STACK,\n }\n }\n reloadRecogState(newState) {\n this.errors = newState.errors\n this.importLexerState(newState.lexerState)\n this.RULE_STACK = newState.RULE_STACK\n }\n ruleInvocationStateUpdate(shortName, fullName, idxInCallingRule) {\n this.RULE_OCCURRENCE_STACK.push(idxInCallingRule)\n this.RULE_STACK.push(shortName)\n // NOOP when cst is disabled\n this.cstInvocationStateUpdate(fullName)\n }\n isBackTracking() {\n return this.isBackTrackingStack.length !== 0\n }\n getCurrRuleFullName() {\n const shortName = this.getLastExplicitRuleShortName()\n return this.shortRuleNameToFull[shortName]\n }\n shortRuleNameToFullName(shortName) {\n return this.shortRuleNameToFull[shortName]\n }\n isAtEndOfInput() {\n return this.tokenMatcher(this.LA(1), EOF)\n }\n reset() {\n this.resetLexerState()\n this.subruleIdx = 0\n this.isBackTrackingStack = []\n this.errors = []\n this.RULE_STACK = []\n // TODO: extract a specific reset for TreeBuilder trait\n this.CST_STACK = []\n this.RULE_OCCURRENCE_STACK = []\n }\n }\n\n /**\n * Trait responsible for runtime parsing errors.\n */\n class ErrorHandler {\n initErrorHandler(config) {\n this._errors = []\n this.errorMessageProvider = has(config, 'errorMessageProvider')\n ? config.errorMessageProvider // assumes end user provides the correct config value/type\n : DEFAULT_PARSER_CONFIG.errorMessageProvider\n }\n SAVE_ERROR(error) {\n if (isRecognitionException(error)) {\n error.context = {\n ruleStack: this.getHumanReadableRuleStack(),\n ruleOccurrenceStack: clone(this.RULE_OCCURRENCE_STACK),\n }\n this._errors.push(error)\n return error\n } else {\n throw Error('Trying to save an Error which is not a RecognitionException')\n }\n }\n get errors() {\n return clone(this._errors)\n }\n set errors(newErrors) {\n this._errors = newErrors\n }\n // TODO: consider caching the error message computed information\n raiseEarlyExitException(occurrence, prodType, userDefinedErrMsg) {\n const ruleName = this.getCurrRuleFullName()\n const ruleGrammar = this.getGAstProductions()[ruleName]\n const lookAheadPathsPerAlternative = getLookaheadPathsForOptionalProd(\n occurrence,\n ruleGrammar,\n prodType,\n this.maxLookahead,\n )\n const insideProdPaths = lookAheadPathsPerAlternative[0]\n const actualTokens = []\n for (let i = 1; i <= this.maxLookahead; i++) {\n actualTokens.push(this.LA(i))\n }\n const msg = this.errorMessageProvider.buildEarlyExitMessage({\n expectedIterationPaths: insideProdPaths,\n actual: actualTokens,\n previous: this.LA(0),\n customUserDescription: userDefinedErrMsg,\n ruleName: ruleName,\n })\n throw this.SAVE_ERROR(new EarlyExitException(msg, this.LA(1), this.LA(0)))\n }\n // TODO: consider caching the error message computed information\n raiseNoAltException(occurrence, errMsgTypes) {\n const ruleName = this.getCurrRuleFullName()\n const ruleGrammar = this.getGAstProductions()[ruleName]\n // TODO: getLookaheadPathsForOr can be slow for large enough maxLookahead and certain grammars, consider caching ?\n const lookAheadPathsPerAlternative = getLookaheadPathsForOr(occurrence, ruleGrammar, this.maxLookahead)\n const actualTokens = []\n for (let i = 1; i <= this.maxLookahead; i++) {\n actualTokens.push(this.LA(i))\n }\n const previousToken = this.LA(0)\n const errMsg = this.errorMessageProvider.buildNoViableAltMessage({\n expectedPathsPerAlt: lookAheadPathsPerAlternative,\n actual: actualTokens,\n previous: previousToken,\n customUserDescription: errMsgTypes,\n ruleName: this.getCurrRuleFullName(),\n })\n throw this.SAVE_ERROR(new NoViableAltException(errMsg, this.LA(1), previousToken))\n }\n }\n\n class ContentAssist {\n initContentAssist() {}\n computeContentAssist(startRuleName, precedingInput) {\n const startRuleGast = this.gastProductionsCache[startRuleName]\n if (isUndefined(startRuleGast)) {\n throw Error(`Rule ->${startRuleName}<- does not exist in this grammar.`)\n }\n return nextPossibleTokensAfter([startRuleGast], precedingInput, this.tokenMatcher, this.maxLookahead)\n }\n // TODO: should this be a member method or a utility? it does not have any state or usage of 'this'...\n // TODO: should this be more explicitly part of the public API?\n getNextPossibleTokenTypes(grammarPath) {\n const topRuleName = head(grammarPath.ruleStack)\n const gastProductions = this.getGAstProductions()\n const topProduction = gastProductions[topRuleName]\n const nextPossibleTokenTypes = new NextAfterTokenWalker(topProduction, grammarPath).startWalking()\n return nextPossibleTokenTypes\n }\n }\n\n const RECORDING_NULL_OBJECT = {\n description: 'This Object indicates the Parser is during Recording Phase',\n }\n Object.freeze(RECORDING_NULL_OBJECT)\n const HANDLE_SEPARATOR = true\n const MAX_METHOD_IDX = Math.pow(2, BITS_FOR_OCCURRENCE_IDX) - 1\n const RFT = createToken({ name: 'RECORDING_PHASE_TOKEN', pattern: Lexer.NA })\n augmentTokenTypes([RFT])\n const RECORDING_PHASE_TOKEN = createTokenInstance(\n RFT,\n 'This IToken indicates the Parser is in Recording Phase\\n\\t' +\n '' +\n 'See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details',\n // Using \"-1\" instead of NaN (as in EOF) because an actual number is less likely to\n // cause errors if the output of LA or CONSUME would be (incorrectly) used during the recording phase.\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n )\n Object.freeze(RECORDING_PHASE_TOKEN)\n const RECORDING_PHASE_CSTNODE = {\n name:\n 'This CSTNode indicates the Parser is in Recording Phase\\n\\t' +\n 'See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details',\n children: {},\n }\n /**\n * This trait handles the creation of the GAST structure for Chevrotain Grammars\n */\n class GastRecorder {\n initGastRecorder(config) {\n this.recordingProdStack = []\n this.RECORDING_PHASE = false\n }\n enableRecording() {\n this.RECORDING_PHASE = true\n this.TRACE_INIT('Enable Recording', () => {\n /**\n * Warning Dark Voodoo Magic upcoming!\n * We are \"replacing\" the public parsing DSL methods API\n * With **new** alternative implementations on the Parser **instance**\n *\n * So far this is the only way I've found to avoid performance regressions during parsing time.\n * - Approx 30% performance regression was measured on Chrome 75 Canary when attempting to replace the \"internal\"\n * implementations directly instead.\n */\n for (let i = 0; i < 10; i++) {\n const idx = i > 0 ? i : ''\n this[`CONSUME${idx}`] = function (arg1, arg2) {\n return this.consumeInternalRecord(arg1, i, arg2)\n }\n this[`SUBRULE${idx}`] = function (arg1, arg2) {\n return this.subruleInternalRecord(arg1, i, arg2)\n }\n this[`OPTION${idx}`] = function (arg1) {\n return this.optionInternalRecord(arg1, i)\n }\n this[`OR${idx}`] = function (arg1) {\n return this.orInternalRecord(arg1, i)\n }\n this[`MANY${idx}`] = function (arg1) {\n this.manyInternalRecord(i, arg1)\n }\n this[`MANY_SEP${idx}`] = function (arg1) {\n this.manySepFirstInternalRecord(i, arg1)\n }\n this[`AT_LEAST_ONE${idx}`] = function (arg1) {\n this.atLeastOneInternalRecord(i, arg1)\n }\n this[`AT_LEAST_ONE_SEP${idx}`] = function (arg1) {\n this.atLeastOneSepFirstInternalRecord(i, arg1)\n }\n }\n // DSL methods with the idx(suffix) as an argument\n this[`consume`] = function (idx, arg1, arg2) {\n return this.consumeInternalRecord(arg1, idx, arg2)\n }\n this[`subrule`] = function (idx, arg1, arg2) {\n return this.subruleInternalRecord(arg1, idx, arg2)\n }\n this[`option`] = function (idx, arg1) {\n return this.optionInternalRecord(arg1, idx)\n }\n this[`or`] = function (idx, arg1) {\n return this.orInternalRecord(arg1, idx)\n }\n this[`many`] = function (idx, arg1) {\n this.manyInternalRecord(idx, arg1)\n }\n this[`atLeastOne`] = function (idx, arg1) {\n this.atLeastOneInternalRecord(idx, arg1)\n }\n this.ACTION = this.ACTION_RECORD\n this.BACKTRACK = this.BACKTRACK_RECORD\n this.LA = this.LA_RECORD\n })\n }\n disableRecording() {\n this.RECORDING_PHASE = false\n // By deleting these **instance** properties, any future invocation\n // will be deferred to the original methods on the **prototype** object\n // This seems to get rid of any incorrect optimizations that V8 may\n // do during the recording phase.\n this.TRACE_INIT('Deleting Recording methods', () => {\n const that = this\n for (let i = 0; i < 10; i++) {\n const idx = i > 0 ? i : ''\n delete that[`CONSUME${idx}`]\n delete that[`SUBRULE${idx}`]\n delete that[`OPTION${idx}`]\n delete that[`OR${idx}`]\n delete that[`MANY${idx}`]\n delete that[`MANY_SEP${idx}`]\n delete that[`AT_LEAST_ONE${idx}`]\n delete that[`AT_LEAST_ONE_SEP${idx}`]\n }\n delete that[`consume`]\n delete that[`subrule`]\n delete that[`option`]\n delete that[`or`]\n delete that[`many`]\n delete that[`atLeastOne`]\n delete that.ACTION\n delete that.BACKTRACK\n delete that.LA\n })\n }\n // Parser methods are called inside an ACTION?\n // Maybe try/catch/finally on ACTIONS while disabling the recorders state changes?\n // @ts-expect-error -- noop place holder\n ACTION_RECORD(impl) {\n // NO-OP during recording\n }\n // Executing backtracking logic will break our recording logic assumptions\n BACKTRACK_RECORD(grammarRule, args) {\n return () => true\n }\n // LA is part of the official API and may be used for custom lookahead logic\n // by end users who may forget to wrap it in ACTION or inside a GATE\n LA_RECORD(howMuch) {\n // We cannot use the RECORD_PHASE_TOKEN here because someone may depend\n // On LA return EOF at the end of the input so an infinite loop may occur.\n return END_OF_FILE\n }\n topLevelRuleRecord(name, def) {\n try {\n const newTopLevelRule = new Rule({ definition: [], name: name })\n newTopLevelRule.name = name\n this.recordingProdStack.push(newTopLevelRule)\n def.call(this)\n this.recordingProdStack.pop()\n return newTopLevelRule\n } catch (originalError) {\n if (originalError.KNOWN_RECORDER_ERROR !== true) {\n try {\n originalError.message =\n originalError.message +\n '\\n\\t This error was thrown during the \"grammar recording phase\" For more info see:\\n\\t' +\n 'https://chevrotain.io/docs/guide/internals.html#grammar-recording'\n } catch (mutabilityError) {\n // We may not be able to modify the original error object\n throw originalError\n }\n }\n throw originalError\n }\n }\n // Implementation of parsing DSL\n optionInternalRecord(actionORMethodDef, occurrence) {\n return recordProd.call(this, Option, actionORMethodDef, occurrence)\n }\n atLeastOneInternalRecord(occurrence, actionORMethodDef) {\n recordProd.call(this, RepetitionMandatory, actionORMethodDef, occurrence)\n }\n atLeastOneSepFirstInternalRecord(occurrence, options) {\n recordProd.call(this, RepetitionMandatoryWithSeparator, options, occurrence, HANDLE_SEPARATOR)\n }\n manyInternalRecord(occurrence, actionORMethodDef) {\n recordProd.call(this, Repetition, actionORMethodDef, occurrence)\n }\n manySepFirstInternalRecord(occurrence, options) {\n recordProd.call(this, RepetitionWithSeparator, options, occurrence, HANDLE_SEPARATOR)\n }\n orInternalRecord(altsOrOpts, occurrence) {\n return recordOrProd.call(this, altsOrOpts, occurrence)\n }\n subruleInternalRecord(ruleToCall, occurrence, options) {\n assertMethodIdxIsValid(occurrence)\n if (!ruleToCall || has(ruleToCall, 'ruleName') === false) {\n const error = new Error(\n `<SUBRULE${getIdxSuffix(occurrence)}> argument is invalid` +\n ` expecting a Parser method reference but got: <${JSON.stringify(ruleToCall)}>` +\n `\\n inside top level rule: <${this.recordingProdStack[0].name}>`,\n )\n error.KNOWN_RECORDER_ERROR = true\n throw error\n }\n const prevProd = last(this.recordingProdStack)\n const ruleName = ruleToCall.ruleName\n const newNoneTerminal = new NonTerminal({\n idx: occurrence,\n nonTerminalName: ruleName,\n label: options === null || options === void 0 ? void 0 : options.LABEL,\n // The resolving of the `referencedRule` property will be done once all the Rule's GASTs have been created\n referencedRule: undefined,\n })\n prevProd.definition.push(newNoneTerminal)\n return this.outputCst ? RECORDING_PHASE_CSTNODE : RECORDING_NULL_OBJECT\n }\n consumeInternalRecord(tokType, occurrence, options) {\n assertMethodIdxIsValid(occurrence)\n if (!hasShortKeyProperty(tokType)) {\n const error = new Error(\n `<CONSUME${getIdxSuffix(occurrence)}> argument is invalid` +\n ` expecting a TokenType reference but got: <${JSON.stringify(tokType)}>` +\n `\\n inside top level rule: <${this.recordingProdStack[0].name}>`,\n )\n error.KNOWN_RECORDER_ERROR = true\n throw error\n }\n const prevProd = last(this.recordingProdStack)\n const newNoneTerminal = new Terminal({\n idx: occurrence,\n terminalType: tokType,\n label: options === null || options === void 0 ? void 0 : options.LABEL,\n })\n prevProd.definition.push(newNoneTerminal)\n return RECORDING_PHASE_TOKEN\n }\n }\n function recordProd(prodConstructor, mainProdArg, occurrence, handleSep = false) {\n assertMethodIdxIsValid(occurrence)\n const prevProd = last(this.recordingProdStack)\n const grammarAction = isFunction(mainProdArg) ? mainProdArg : mainProdArg.DEF\n const newProd = new prodConstructor({ definition: [], idx: occurrence })\n if (handleSep) {\n newProd.separator = mainProdArg.SEP\n }\n if (has(mainProdArg, 'MAX_LOOKAHEAD')) {\n newProd.maxLookahead = mainProdArg.MAX_LOOKAHEAD\n }\n this.recordingProdStack.push(newProd)\n grammarAction.call(this)\n prevProd.definition.push(newProd)\n this.recordingProdStack.pop()\n return RECORDING_NULL_OBJECT\n }\n function recordOrProd(mainProdArg, occurrence) {\n assertMethodIdxIsValid(occurrence)\n const prevProd = last(this.recordingProdStack)\n // Only an array of alternatives\n const hasOptions = isArray$1(mainProdArg) === false\n const alts = hasOptions === false ? mainProdArg : mainProdArg.DEF\n const newOrProd = new Alternation({\n definition: [],\n idx: occurrence,\n ignoreAmbiguities: hasOptions && mainProdArg.IGNORE_AMBIGUITIES === true,\n })\n if (has(mainProdArg, 'MAX_LOOKAHEAD')) {\n newOrProd.maxLookahead = mainProdArg.MAX_LOOKAHEAD\n }\n const hasPredicates = some(alts, (currAlt) => isFunction(currAlt.GATE))\n newOrProd.hasPredicates = hasPredicates\n prevProd.definition.push(newOrProd)\n forEach(alts, (currAlt) => {\n const currAltFlat = new Alternative({ definition: [] })\n newOrProd.definition.push(currAltFlat)\n if (has(currAlt, 'IGNORE_AMBIGUITIES')) {\n currAltFlat.ignoreAmbiguities = currAlt.IGNORE_AMBIGUITIES // assumes end user provides the correct config value/type\n }\n // **implicit** ignoreAmbiguities due to usage of gate\n else if (has(currAlt, 'GATE')) {\n currAltFlat.ignoreAmbiguities = true\n }\n this.recordingProdStack.push(currAltFlat)\n currAlt.ALT.call(this)\n this.recordingProdStack.pop()\n })\n return RECORDING_NULL_OBJECT\n }\n function getIdxSuffix(idx) {\n return idx === 0 ? '' : `${idx}`\n }\n function assertMethodIdxIsValid(idx) {\n if (idx < 0 || idx > MAX_METHOD_IDX) {\n const error = new Error(\n // The stack trace will contain all the needed details\n `Invalid DSL Method idx value: <${idx}>\\n\\t` +\n `Idx value must be a none negative value smaller than ${MAX_METHOD_IDX + 1}`,\n )\n error.KNOWN_RECORDER_ERROR = true\n throw error\n }\n }\n\n /**\n * Trait responsible for runtime parsing errors.\n */\n class PerformanceTracer {\n initPerformanceTracer(config) {\n if (has(config, 'traceInitPerf')) {\n const userTraceInitPerf = config.traceInitPerf\n const traceIsNumber = typeof userTraceInitPerf === 'number'\n this.traceInitMaxIdent = traceIsNumber ? userTraceInitPerf : Infinity\n this.traceInitPerf = traceIsNumber ? userTraceInitPerf > 0 : userTraceInitPerf // assumes end user provides the correct config value/type\n } else {\n this.traceInitMaxIdent = 0\n this.traceInitPerf = DEFAULT_PARSER_CONFIG.traceInitPerf\n }\n this.traceInitIndent = -1\n }\n TRACE_INIT(phaseDesc, phaseImpl) {\n // No need to optimize this using NOOP pattern because\n // It is not called in a hot spot...\n if (this.traceInitPerf === true) {\n this.traceInitIndent++\n const indent = new Array(this.traceInitIndent + 1).join('\\t')\n if (this.traceInitIndent < this.traceInitMaxIdent) {\n console.log(`${indent}--> <${phaseDesc}>`)\n }\n const { time, value } = timer(phaseImpl)\n /* istanbul ignore next - Difficult to reproduce specific performance behavior (>10ms) in tests */\n const traceMethod = time > 10 ? console.warn : console.log\n if (this.traceInitIndent < this.traceInitMaxIdent) {\n traceMethod(`${indent}<-- <${phaseDesc}> time: ${time}ms`)\n }\n this.traceInitIndent--\n return value\n } else {\n return phaseImpl()\n }\n }\n }\n\n function applyMixins(derivedCtor, baseCtors) {\n baseCtors.forEach((baseCtor) => {\n const baseProto = baseCtor.prototype\n Object.getOwnPropertyNames(baseProto).forEach((propName) => {\n if (propName === 'constructor') {\n return\n }\n const basePropDescriptor = Object.getOwnPropertyDescriptor(baseProto, propName)\n // Handle Accessors\n if (basePropDescriptor && (basePropDescriptor.get || basePropDescriptor.set)) {\n Object.defineProperty(derivedCtor.prototype, propName, basePropDescriptor)\n } else {\n derivedCtor.prototype[propName] = baseCtor.prototype[propName]\n }\n })\n })\n }\n\n const END_OF_FILE = createTokenInstance(EOF, '', NaN, NaN, NaN, NaN, NaN, NaN)\n Object.freeze(END_OF_FILE)\n const DEFAULT_PARSER_CONFIG = Object.freeze({\n recoveryEnabled: false,\n maxLookahead: 3,\n dynamicTokensEnabled: false,\n outputCst: true,\n errorMessageProvider: defaultParserErrorProvider,\n nodeLocationTracking: 'none',\n traceInitPerf: false,\n skipValidations: false,\n })\n const DEFAULT_RULE_CONFIG = Object.freeze({\n recoveryValueFunc: () => undefined,\n resyncEnabled: true,\n })\n var ParserDefinitionErrorType\n ;(function (ParserDefinitionErrorType) {\n ParserDefinitionErrorType[(ParserDefinitionErrorType['INVALID_RULE_NAME'] = 0)] = 'INVALID_RULE_NAME'\n ParserDefinitionErrorType[(ParserDefinitionErrorType['DUPLICATE_RULE_NAME'] = 1)] = 'DUPLICATE_RULE_NAME'\n ParserDefinitionErrorType[(ParserDefinitionErrorType['INVALID_RULE_OVERRIDE'] = 2)] = 'INVALID_RULE_OVERRIDE'\n ParserDefinitionErrorType[(ParserDefinitionErrorType['DUPLICATE_PRODUCTIONS'] = 3)] = 'DUPLICATE_PRODUCTIONS'\n ParserDefinitionErrorType[(ParserDefinitionErrorType['UNRESOLVED_SUBRULE_REF'] = 4)] = 'UNRESOLVED_SUBRULE_REF'\n ParserDefinitionErrorType[(ParserDefinitionErrorType['LEFT_RECURSION'] = 5)] = 'LEFT_RECURSION'\n ParserDefinitionErrorType[(ParserDefinitionErrorType['NONE_LAST_EMPTY_ALT'] = 6)] = 'NONE_LAST_EMPTY_ALT'\n ParserDefinitionErrorType[(ParserDefinitionErrorType['AMBIGUOUS_ALTS'] = 7)] = 'AMBIGUOUS_ALTS'\n ParserDefinitionErrorType[(ParserDefinitionErrorType['CONFLICT_TOKENS_RULES_NAMESPACE'] = 8)] =\n 'CONFLICT_TOKENS_RULES_NAMESPACE'\n ParserDefinitionErrorType[(ParserDefinitionErrorType['INVALID_TOKEN_NAME'] = 9)] = 'INVALID_TOKEN_NAME'\n ParserDefinitionErrorType[(ParserDefinitionErrorType['NO_NON_EMPTY_LOOKAHEAD'] = 10)] = 'NO_NON_EMPTY_LOOKAHEAD'\n ParserDefinitionErrorType[(ParserDefinitionErrorType['AMBIGUOUS_PREFIX_ALTS'] = 11)] = 'AMBIGUOUS_PREFIX_ALTS'\n ParserDefinitionErrorType[(ParserDefinitionErrorType['TOO_MANY_ALTS'] = 12)] = 'TOO_MANY_ALTS'\n ParserDefinitionErrorType[(ParserDefinitionErrorType['CUSTOM_LOOKAHEAD_VALIDATION'] = 13)] =\n 'CUSTOM_LOOKAHEAD_VALIDATION'\n })(ParserDefinitionErrorType || (ParserDefinitionErrorType = {}))\n class Parser {\n /**\n * @deprecated use the **instance** method with the same name instead\n */\n static performSelfAnalysis(parserInstance) {\n throw Error(\n 'The **static** `performSelfAnalysis` method has been deprecated.' +\n '\\t\\nUse the **instance** method with the same name instead.',\n )\n }\n performSelfAnalysis() {\n this.TRACE_INIT('performSelfAnalysis', () => {\n let defErrorsMsgs\n this.selfAnalysisDone = true\n const className = this.className\n this.TRACE_INIT('toFastProps', () => {\n // Without this voodoo magic the parser would be x3-x4 slower\n // It seems it is better to invoke `toFastProperties` **before**\n // Any manipulations of the `this` object done during the recording phase.\n toFastProperties(this)\n })\n this.TRACE_INIT('Grammar Recording', () => {\n try {\n this.enableRecording()\n // Building the GAST\n forEach(this.definedRulesNames, (currRuleName) => {\n const wrappedRule = this[currRuleName]\n const originalGrammarAction = wrappedRule['originalGrammarAction']\n let recordedRuleGast\n this.TRACE_INIT(`${currRuleName} Rule`, () => {\n recordedRuleGast = this.topLevelRuleRecord(currRuleName, originalGrammarAction)\n })\n this.gastProductionsCache[currRuleName] = recordedRuleGast\n })\n } finally {\n this.disableRecording()\n }\n })\n let resolverErrors = []\n this.TRACE_INIT('Grammar Resolving', () => {\n resolverErrors = resolveGrammar({\n rules: values(this.gastProductionsCache),\n })\n this.definitionErrors = this.definitionErrors.concat(resolverErrors)\n })\n this.TRACE_INIT('Grammar Validations', () => {\n // only perform additional grammar validations IFF no resolving errors have occurred.\n // as unresolved grammar may lead to unhandled runtime exceptions in the follow up validations.\n if (isEmpty(resolverErrors) && this.skipValidations === false) {\n const validationErrors = validateGrammar({\n rules: values(this.gastProductionsCache),\n tokenTypes: values(this.tokensMap),\n errMsgProvider: defaultGrammarValidatorErrorProvider,\n grammarName: className,\n })\n const lookaheadValidationErrors = validateLookahead({\n lookaheadStrategy: this.lookaheadStrategy,\n rules: values(this.gastProductionsCache),\n tokenTypes: values(this.tokensMap),\n grammarName: className,\n })\n this.definitionErrors = this.definitionErrors.concat(validationErrors, lookaheadValidationErrors)\n }\n })\n // this analysis may fail if the grammar is not perfectly valid\n if (isEmpty(this.definitionErrors)) {\n // The results of these computations are not needed unless error recovery is enabled.\n if (this.recoveryEnabled) {\n this.TRACE_INIT('computeAllProdsFollows', () => {\n const allFollows = computeAllProdsFollows(values(this.gastProductionsCache))\n this.resyncFollows = allFollows\n })\n }\n this.TRACE_INIT('ComputeLookaheadFunctions', () => {\n var _a, _b\n ;(_b = (_a = this.lookaheadStrategy).initialize) === null || _b === void 0\n ? void 0\n : _b.call(_a, {\n rules: values(this.gastProductionsCache),\n })\n this.preComputeLookaheadFunctions(values(this.gastProductionsCache))\n })\n }\n if (!Parser.DEFER_DEFINITION_ERRORS_HANDLING && !isEmpty(this.definitionErrors)) {\n defErrorsMsgs = map(this.definitionErrors, (defError) => defError.message)\n throw new Error(\n `Parser Definition Errors detected:\\n ${defErrorsMsgs.join('\\n-------------------------------\\n')}`,\n )\n }\n })\n }\n constructor(tokenVocabulary, config) {\n this.definitionErrors = []\n this.selfAnalysisDone = false\n const that = this\n that.initErrorHandler(config)\n that.initLexerAdapter()\n that.initLooksAhead(config)\n that.initRecognizerEngine(tokenVocabulary, config)\n that.initRecoverable(config)\n that.initTreeBuilder(config)\n that.initContentAssist()\n that.initGastRecorder(config)\n that.initPerformanceTracer(config)\n if (has(config, 'ignoredIssues')) {\n throw new Error(\n 'The <ignoredIssues> IParserConfig property has been deprecated.\\n\\t' +\n 'Please use the <IGNORE_AMBIGUITIES> flag on the relevant DSL method instead.\\n\\t' +\n 'See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES\\n\\t' +\n 'For further details.',\n )\n }\n this.skipValidations = has(config, 'skipValidations')\n ? config.skipValidations // casting assumes the end user passing the correct type\n : DEFAULT_PARSER_CONFIG.skipValidations\n }\n }\n // Set this flag to true if you don't want the Parser to throw error when problems in it's definition are detected.\n // (normally during the parser's constructor).\n // This is a design time flag, it will not affect the runtime error handling of the parser, just design time errors,\n // for example: duplicate rule names, referencing an unresolved subrule, ect...\n // This flag should not be enabled during normal usage, it is used in special situations, for example when\n // needing to display the parser definition errors in some GUI(online playground).\n Parser.DEFER_DEFINITION_ERRORS_HANDLING = false\n applyMixins(Parser, [\n Recoverable,\n LooksAhead,\n TreeBuilder,\n LexerAdapter,\n RecognizerEngine,\n RecognizerApi,\n ErrorHandler,\n ContentAssist,\n GastRecorder,\n PerformanceTracer,\n ])\n class CstParser extends Parser {\n constructor(tokenVocabulary, config = DEFAULT_PARSER_CONFIG) {\n const configClone = clone(config)\n configClone.outputCst = true\n super(tokenVocabulary, configClone)\n }\n }\n\n return { CstParser, Lexer, createToken }\n})()\n\nexport { CstParser, Lexer, createToken }\n"],"names":["map","values","key","othValue","collection","includes","Lexer","LexerDefinitionErrorType","msg","currConfig","createToken","getExtraProductionArgument","PROD_TYPE","tokenMatcher","keys","prefixKeys","collectorVisitor","CstVisitorDefinitionError","allTokenTypes","invokeRuleWithTry","ParserDefinitionErrorType","CstParser"],"mappings":";;AAAK,MAAC,EAAE,WAAW,OAAO,YAAW,KAAM,MAAM;AAE/C,MAAI,aAAa,OAAO,UAAU,YAAY,UAAU,OAAO,WAAW,UAAU;AAEpF,QAAM,eAAe;AAGrB,MAAI,WAAW,OAAO,QAAQ,YAAY,QAAQ,KAAK,WAAW,UAAU;AAG5E,MAAI,OAAO,gBAAgB,YAAY,SAAS,aAAa,EAAG;AAEhE,QAAM,SAAS;AAGf,MAAI,WAAW,OAAO;AAEtB,QAAM,WAAW;AAGjB,MAAI,gBAAgB,OAAO;AAG3B,MAAI,mBAAmB,cAAc;AAOrC,MAAI,yBAAyB,cAAc;AAG3C,MAAI,mBAAmB,WAAW,SAAS,cAAc;AASzD,WAAS,UAAU,OAAO;AACxB,QAAI,QAAQ,iBAAiB,KAAK,OAAO,gBAAgB,GACvD,MAAM,MAAM,gBAAgB;AAE9B,QAAI;AACF,YAAM,gBAAgB,IAAI;AAC1B,UAAI,WAAW;AAAA,IACrB,SAAa,GAAP;AAAA,IAAY;AAEd,QAAI,SAAS,uBAAuB,KAAK,KAAK;AAC9C,QAAI,UAAU;AACZ,UAAI,OAAO;AACT,cAAM,gBAAgB,IAAI;AAAA,MAClC,OAAa;AACL,eAAO,MAAM,gBAAgB;AAAA,MAC9B;AAAA,IACF;AACD,WAAO;AAAA,EACR;AAGD,MAAI,gBAAgB,OAAO;AAO3B,MAAI,uBAAuB,cAAc;AASzC,WAAS,eAAe,OAAO;AAC7B,WAAO,qBAAqB,KAAK,KAAK;AAAA,EACvC;AAGD,MAAI,UAAU,iBACZ,eAAe;AAGjB,MAAI,iBAAiB,WAAW,SAAS,cAAc;AASvD,WAAS,WAAW,OAAO;AACzB,QAAI,SAAS,MAAM;AACjB,aAAO,UAAU,SAAY,eAAe;AAAA,IAC7C;AACD,WAAO,kBAAkB,kBAAkB,OAAO,KAAK,IAAI,UAAU,KAAK,IAAI,eAAe,KAAK;AAAA,EACnG;AA0BD,WAAS,aAAa,OAAO;AAC3B,WAAO,SAAS,QAAQ,OAAO,SAAS;AAAA,EACzC;AAGD,MAAI,cAAc;AAmBlB,WAAS,SAAS,OAAO;AACvB,WAAO,OAAO,SAAS,YAAa,aAAa,KAAK,KAAK,WAAW,KAAK,KAAK;AAAA,EACjF;AAWD,WAAS,SAAS,OAAO,UAAU;AACjC,QAAI,QAAQ,IACV,SAAS,SAAS,OAAO,IAAI,MAAM,QACnC,SAAS,MAAM,MAAM;AAEvB,WAAO,EAAE,QAAQ,QAAQ;AACvB,aAAO,KAAK,IAAI,SAAS,MAAM,KAAK,GAAG,OAAO,KAAK;AAAA,IACpD;AACD,WAAO;AAAA,EACR;AAyBD,MAAI,UAAU,MAAM;AAEpB,QAAM,YAAY;AAGlB,MAAI,aAAa,IAAI;AAGrB,MAAI,gBAAgB,WAAW,SAAS,YAAY,QAClD,iBAAiB,gBAAgB,cAAc,WAAW;AAU5D,WAAS,aAAa,OAAO;AAE3B,QAAI,OAAO,SAAS,UAAU;AAC5B,aAAO;AAAA,IACR;AACD,QAAI,UAAU,KAAK,GAAG;AAEpB,aAAO,SAAS,OAAO,YAAY,IAAI;AAAA,IACxC;AACD,QAAI,SAAS,KAAK,GAAG;AACnB,aAAO,iBAAiB,eAAe,KAAK,KAAK,IAAI;AAAA,IACtD;AACD,QAAI,SAAS,QAAQ;AACrB,WAAO,UAAU,OAAO,IAAI,SAAS,CAAC,aAAa,OAAO;AAAA,EAC3D;AAGD,MAAI,eAAe;AAUnB,WAAS,gBAAgB,QAAQ;AAC/B,QAAI,QAAQ,OAAO;AAEnB,WAAO,WAAW,aAAa,KAAK,OAAO,OAAO,KAAK,CAAC,GAAG;AAAA,IAAE;AAC7D,WAAO;AAAA,EACR;AAGD,MAAI,cAAc;AASlB,WAAS,SAAS,QAAQ;AACxB,WAAO,SAAS,OAAO,MAAM,GAAG,gBAAgB,MAAM,IAAI,CAAC,EAAE,QAAQ,aAAa,EAAE,IAAI;AAAA,EACzF;AA2BD,WAAS,SAAS,OAAO;AACvB,QAAI,OAAO,OAAO;AAClB,WAAO,SAAS,SAAS,QAAQ,YAAY,QAAQ;AAAA,EACtD;AAGD,MAAI,MAAM,IAAI;AAGd,MAAI,aAAa;AAGjB,MAAI,aAAa;AAGjB,MAAI,YAAY;AAGhB,MAAI,eAAe;AAyBnB,WAAS,SAAS,OAAO;AACvB,QAAI,OAAO,SAAS,UAAU;AAC5B,aAAO;AAAA,IACR;AACD,QAAI,SAAS,KAAK,GAAG;AACnB,aAAO;AAAA,IACR;AACD,QAAI,SAAS,KAAK,GAAG;AACnB,UAAI,QAAQ,OAAO,MAAM,WAAW,aAAa,MAAM,QAAO,IAAK;AACnE,cAAQ,SAAS,KAAK,IAAI,QAAQ,KAAK;AAAA,IACxC;AACD,QAAI,OAAO,SAAS,UAAU;AAC5B,aAAO,UAAU,IAAI,QAAQ,CAAC;AAAA,IAC/B;AACD,YAAQ,SAAS,KAAK;AACtB,QAAI,WAAW,WAAW,KAAK,KAAK;AACpC,WAAO,YAAY,UAAU,KAAK,KAAK,IACnC,aAAa,MAAM,MAAM,CAAC,GAAG,WAAW,IAAI,CAAC,IAC7C,WAAW,KAAK,KAAK,IACrB,MACA,CAAC;AAAA,EACN;AAGD,MAAI,aAAa,IAAI,GACnB,cAAc;AAyBhB,WAAS,SAAS,OAAO;AACvB,QAAI,CAAC,OAAO;AACV,aAAO,UAAU,IAAI,QAAQ;AAAA,IAC9B;AACD,YAAQ,SAAS,KAAK;AACtB,QAAI,UAAU,cAAc,UAAU,CAAC,YAAY;AACjD,UAAI,OAAO,QAAQ,IAAI,KAAK;AAC5B,aAAO,OAAO;AAAA,IACf;AACD,WAAO,UAAU,QAAQ,QAAQ;AAAA,EAClC;AA4BD,WAAS,UAAU,OAAO;AACxB,QAAI,SAAS,SAAS,KAAK,GACzB,YAAY,SAAS;AAEvB,WAAO,WAAW,SAAU,YAAY,SAAS,YAAY,SAAU;AAAA,EACxE;AAkBD,WAAS,SAAS,OAAO;AACvB,WAAO;AAAA,EACR;AAGD,MAAI,WAAW,0BACb,YAAY,qBACZ,WAAW,8BACX,WAAW;AAmBb,WAAS,WAAW,OAAO;AACzB,QAAI,CAAC,SAAS,KAAK,GAAG;AACpB,aAAO;AAAA,IACR;AAGD,QAAI,MAAM,WAAW,KAAK;AAC1B,WAAO,OAAO,aAAa,OAAO,YAAY,OAAO,YAAY,OAAO;AAAA,EACzE;AAGD,MAAI,aAAa,OAAO,oBAAoB;AAE5C,QAAM,eAAe;AAGrB,MAAI,aAAc,WAAY;AAC5B,QAAI,MAAM,SAAS,KAAM,gBAAgB,aAAa,QAAQ,aAAa,KAAK,YAAa,EAAE;AAC/F,WAAO,MAAM,mBAAmB,MAAM;AAAA,EAC1C,EAAM;AASJ,WAAS,SAAS,MAAM;AACtB,WAAO,CAAC,CAAC,cAAc,cAAc;AAAA,EACtC;AAGD,MAAI,cAAc,SAAS;AAG3B,MAAI,iBAAiB,YAAY;AASjC,WAAS,SAAS,MAAM;AACtB,QAAI,QAAQ,MAAM;AAChB,UAAI;AACF,eAAO,eAAe,KAAK,IAAI;AAAA,MACvC,SAAe,GAAP;AAAA,MAAY;AACd,UAAI;AACF,eAAO,OAAO;AAAA,MACtB,SAAe,GAAP;AAAA,MAAY;AAAA,IACf;AACD,WAAO;AAAA,EACR;AAMD,MAAI,eAAe;AAGnB,MAAI,eAAe;AAGnB,MAAI,YAAY,SAAS,WACvB,gBAAgB,OAAO;AAGzB,MAAI,eAAe,UAAU;AAG7B,MAAI,mBAAmB,cAAc;AAGrC,MAAI,aAAa;AAAA,IACf,MACE,aACG,KAAK,gBAAgB,EACrB,QAAQ,cAAc,MAAM,EAC5B,QAAQ,0DAA0D,OAAO,IAC5E;AAAA,EACH;AAUD,WAAS,aAAa,OAAO;AAC3B,QAAI,CAAC,SAAS,KAAK,KAAK,SAAS,KAAK,GAAG;AACvC,aAAO;AAAA,IACR;AACD,QAAI,UAAU,WAAW,KAAK,IAAI,aAAa;AAC/C,WAAO,QAAQ,KAAK,SAAS,KAAK,CAAC;AAAA,EACpC;AAUD,WAAS,SAAS,QAAQ,KAAK;AAC7B,WAAO,UAAU,OAAO,SAAY,OAAO,GAAG;AAAA,EAC/C;AAUD,WAAS,UAAU,QAAQ,KAAK;AAC9B,QAAI,QAAQ,SAAS,QAAQ,GAAG;AAChC,WAAO,aAAa,KAAK,IAAI,QAAQ;AAAA,EACtC;AAGD,MAAI,UAAU,UAAU,QAAQ,SAAS;AAEzC,QAAM,YAAY;AAGlB,MAAI,eAAe,OAAO;AAU1B,MAAI,aAAc,WAAY;AAC5B,aAAS,SAAS;AAAA,IAAE;AACpB,WAAO,SAAU,OAAO;AACtB,UAAI,CAAC,SAAS,KAAK,GAAG;AACpB,eAAO,CAAE;AAAA,MACV;AACD,UAAI,cAAc;AAChB,eAAO,aAAa,KAAK;AAAA,MAC1B;AACD,aAAO,YAAY;AACnB,UAAI,SAAS,IAAI,OAAQ;AACzB,aAAO,YAAY;AACnB,aAAO;AAAA,IACR;AAAA,EACL,EAAM;AAEJ,QAAM,eAAe;AAYrB,WAAS,MAAM,MAAM,SAAS,MAAM;AAClC,YAAQ,KAAK,QAAM;AAAA,MACjB,KAAK;AACH,eAAO,KAAK,KAAK,OAAO;AAAA,MAC1B,KAAK;AACH,eAAO,KAAK,KAAK,SAAS,KAAK,CAAC,CAAC;AAAA,MACnC,KAAK;AACH,eAAO,KAAK,KAAK,SAAS,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC;AAAA,MAC5C,KAAK;AACH,eAAO,KAAK,KAAK,SAAS,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC;AAAA,IACtD;AACD,WAAO,KAAK,MAAM,SAAS,IAAI;AAAA,EAChC;AAcD,WAAS,OAAO;AAAA,EAEf;AAUD,WAAS,UAAU,QAAQ,OAAO;AAChC,QAAI,QAAQ,IACV,SAAS,OAAO;AAElB,cAAU,QAAQ,MAAM,MAAM;AAC9B,WAAO,EAAE,QAAQ,QAAQ;AACvB,YAAM,KAAK,IAAI,OAAO,KAAK;AAAA,IAC5B;AACD,WAAO;AAAA,EACR;AAGD,MAAI,YAAY,KACd,WAAW;AAGb,MAAI,YAAY,KAAK;AAWrB,WAAS,SAAS,MAAM;AACtB,QAAI,QAAQ,GACV,aAAa;AAEf,WAAO,WAAY;AACjB,UAAI,QAAQ,UAAW,GACrB,YAAY,YAAY,QAAQ;AAElC,mBAAa;AACb,UAAI,YAAY,GAAG;AACjB,YAAI,EAAE,SAAS,WAAW;AACxB,iBAAO,UAAU,CAAC;AAAA,QACnB;AAAA,MACT,OAAa;AACL,gBAAQ;AAAA,MACT;AACD,aAAO,KAAK,MAAM,QAAW,SAAS;AAAA,IACvC;AAAA,EACF;AAqBD,WAAS,SAAS,OAAO;AACvB,WAAO,WAAY;AACjB,aAAO;AAAA,IACR;AAAA,EACF;AAED,MAAI,iBAAkB,WAAY;AAChC,QAAI;AACF,UAAI,OAAO,UAAU,QAAQ,gBAAgB;AAC7C,WAAK,CAAA,GAAI,IAAI,EAAE;AACf,aAAO;AAAA,IACb,SAAa,GAAP;AAAA,IAAY;AAAA,EAClB,EAAM;AAEJ,QAAM,mBAAmB;AAUzB,MAAI,kBAAkB,CAAC,mBACnB,WACA,SAAU,MAAM,QAAQ;AACtB,WAAO,iBAAiB,MAAM,YAAY;AAAA,MACxC,cAAc;AAAA,MACd,YAAY;AAAA,MACZ,OAAO,SAAS,MAAM;AAAA,MACtB,UAAU;AAAA,IACpB,CAAS;AAAA,EACF;AAEL,QAAM,oBAAoB;AAU1B,MAAI,cAAc,SAAS,iBAAiB;AAE5C,QAAM,gBAAgB;AAWtB,WAAS,UAAU,OAAO,UAAU;AAClC,QAAI,QAAQ,IACV,SAAS,SAAS,OAAO,IAAI,MAAM;AAErC,WAAO,EAAE,QAAQ,QAAQ;AACvB,UAAI,SAAS,MAAM,KAAK,GAAG,OAAO,KAAK,MAAM,OAAO;AAClD;AAAA,MACD;AAAA,IACF;AACD,WAAO;AAAA,EACR;AAaD,WAAS,cAAc,OAAO,WAAW,WAAW,WAAW;AAC7D,QAAI,SAAS,MAAM,QACjB,QAAQ,aAAa,YAAY,IAAI;AAEvC,WAAO,YAAY,UAAU,EAAE,QAAQ,QAAQ;AAC7C,UAAI,UAAU,MAAM,KAAK,GAAG,OAAO,KAAK,GAAG;AACzC,eAAO;AAAA,MACR;AAAA,IACF;AACD,WAAO;AAAA,EACR;AASD,WAAS,UAAU,OAAO;AACxB,WAAO,UAAU;AAAA,EAClB;AAYD,WAAS,cAAc,OAAO,OAAO,WAAW;AAC9C,QAAI,QAAQ,YAAY,GACtB,SAAS,MAAM;AAEjB,WAAO,EAAE,QAAQ,QAAQ;AACvB,UAAI,MAAM,KAAK,MAAM,OAAO;AAC1B,eAAO;AAAA,MACR;AAAA,IACF;AACD,WAAO;AAAA,EACR;AAWD,WAAS,YAAY,OAAO,OAAO,WAAW;AAC5C,WAAO,UAAU,QAAQ,cAAc,OAAO,OAAO,SAAS,IAAI,cAAc,OAAO,WAAW,SAAS;AAAA,EAC5G;AAWD,WAAS,cAAc,OAAO,OAAO;AACnC,QAAI,SAAS,SAAS,OAAO,IAAI,MAAM;AACvC,WAAO,CAAC,CAAC,UAAU,YAAY,OAAO,OAAO,CAAC,IAAI;AAAA,EACnD;AAGD,MAAI,qBAAqB;AAGzB,MAAI,WAAW;AAUf,WAAS,QAAQ,OAAO,QAAQ;AAC9B,QAAI,OAAO,OAAO;AAClB,aAAS,UAAU,OAAO,qBAAqB;AAE/C,WACE,CAAC,CAAC,WACD,QAAQ,YAAa,QAAQ,YAAY,SAAS,KAAK,KAAK,MAC7D,QAAQ,MACR,QAAQ,KAAK,KACb,QAAQ;AAAA,EAEX;AAWD,WAAS,gBAAgB,QAAQ,KAAK,OAAO;AAC3C,QAAI,OAAO,eAAe,kBAAkB;AAC1C,uBAAiB,QAAQ,KAAK;AAAA,QAC5B,cAAc;AAAA,QACd,YAAY;AAAA,QACZ;AAAA,QACA,UAAU;AAAA,MAClB,CAAO;AAAA,IACP,OAAW;AACL,aAAO,GAAG,IAAI;AAAA,IACf;AAAA,EACF;AAkCD,WAAS,GAAG,OAAO,OAAO;AACxB,WAAO,UAAU,SAAU,UAAU,SAAS,UAAU;AAAA,EACzD;AAGD,MAAI,gBAAgB,OAAO;AAG3B,MAAI,mBAAmB,cAAc;AAYrC,WAAS,YAAY,QAAQ,KAAK,OAAO;AACvC,QAAI,WAAW,OAAO,GAAG;AACzB,QAAI,EAAE,iBAAiB,KAAK,QAAQ,GAAG,KAAK,GAAG,UAAU,KAAK,MAAO,UAAU,UAAa,EAAE,OAAO,SAAU;AAC7G,sBAAgB,QAAQ,KAAK,KAAK;AAAA,IACnC;AAAA,EACF;AAYD,WAAS,WAAW,QAAQ,OAAO,QAAQ,YAAY;AACrD,QAAI,QAAQ,CAAC;AACb,eAAW,SAAS;AAEpB,QAAI,QAAQ,IACV,SAAS,MAAM;AAEjB,WAAO,EAAE,QAAQ,QAAQ;AACvB,UAAI,MAAM,MAAM,KAAK;AAErB,UAAI,WAAW,aAAa,WAAW,OAAO,GAAG,GAAG,OAAO,GAAG,GAAG,KAAK,QAAQ,MAAM,IAAI;AAExF,UAAI,aAAa,QAAW;AAC1B,mBAAW,OAAO,GAAG;AAAA,MACtB;AACD,UAAI,OAAO;AACT,wBAAgB,QAAQ,KAAK,QAAQ;AAAA,MAC7C,OAAa;AACL,oBAAY,QAAQ,KAAK,QAAQ;AAAA,MAClC;AAAA,IACF;AACD,WAAO;AAAA,EACR;AAGD,MAAI,cAAc,KAAK;AAWvB,WAAS,SAAS,MAAM,OAAO,WAAW;AACxC,YAAQ,YAAY,UAAU,SAAY,KAAK,SAAS,IAAI,OAAO,CAAC;AACpE,WAAO,WAAY;AACjB,UAAI,OAAO,WACT,QAAQ,IACR,SAAS,YAAY,KAAK,SAAS,OAAO,CAAC,GAC3C,QAAQ,MAAM,MAAM;AAEtB,aAAO,EAAE,QAAQ,QAAQ;AACvB,cAAM,KAAK,IAAI,KAAK,QAAQ,KAAK;AAAA,MAClC;AACD,cAAQ;AACR,UAAI,YAAY,MAAM,QAAQ,CAAC;AAC/B,aAAO,EAAE,QAAQ,OAAO;AACtB,kBAAU,KAAK,IAAI,KAAK,KAAK;AAAA,MAC9B;AACD,gBAAU,KAAK,IAAI,UAAU,KAAK;AAClC,aAAO,MAAM,MAAM,MAAM,SAAS;AAAA,IACnC;AAAA,EACF;AAUD,WAAS,SAAS,MAAM,OAAO;AAC7B,WAAO,cAAc,SAAS,MAAM,OAAO,QAAQ,GAAG,OAAO,EAAE;AAAA,EAChE;AAGD,MAAI,mBAAmB;AA4BvB,WAAS,SAAS,OAAO;AACvB,WAAO,OAAO,SAAS,YAAY,QAAQ,MAAM,QAAQ,KAAK,KAAK,SAAS;AAAA,EAC7E;AA2BD,WAAS,YAAY,OAAO;AAC1B,WAAO,SAAS,QAAQ,SAAS,MAAM,MAAM,KAAK,CAAC,WAAW,KAAK;AAAA,EACpE;AAYD,WAAS,eAAe,OAAO,OAAO,QAAQ;AAC5C,QAAI,CAAC,SAAS,MAAM,GAAG;AACrB,aAAO;AAAA,IACR;AACD,QAAI,OAAO,OAAO;AAClB,QAAI,QAAQ,WAAW,YAAY,MAAM,KAAK,QAAQ,OAAO,OAAO,MAAM,IAAI,QAAQ,YAAY,SAAS,QAAQ;AACjH,aAAO,GAAG,OAAO,KAAK,GAAG,KAAK;AAAA,IAC/B;AACD,WAAO;AAAA,EACR;AASD,WAAS,eAAe,UAAU;AAChC,WAAO,SAAS,SAAU,QAAQ,SAAS;AACzC,UAAI,QAAQ,IACV,SAAS,QAAQ,QACjB,aAAa,SAAS,IAAI,QAAQ,SAAS,CAAC,IAAI,QAChD,QAAQ,SAAS,IAAI,QAAQ,CAAC,IAAI;AAEpC,mBAAa,SAAS,SAAS,KAAK,OAAO,cAAc,cAAc,UAAU,cAAc;AAE/F,UAAI,SAAS,eAAe,QAAQ,CAAC,GAAG,QAAQ,CAAC,GAAG,KAAK,GAAG;AAC1D,qBAAa,SAAS,IAAI,SAAY;AACtC,iBAAS;AAAA,MACV;AACD,eAAS,OAAO,MAAM;AACtB,aAAO,EAAE,QAAQ,QAAQ;AACvB,YAAI,SAAS,QAAQ,KAAK;AAC1B,YAAI,QAAQ;AACV,mBAAS,QAAQ,QAAQ,OAAO,UAAU;AAAA,QAC3C;AAAA,MACF;AACD,aAAO;AAAA,IACb,CAAK;AAAA,EACF;AAGD,MAAI,gBAAgB,OAAO;AAS3B,WAAS,YAAY,OAAO;AAC1B,QAAI,OAAO,SAAS,MAAM,aACxB,QAAS,OAAO,QAAQ,cAAc,KAAK,aAAc;AAE3D,WAAO,UAAU;AAAA,EAClB;AAWD,WAAS,UAAU,GAAG,UAAU;AAC9B,QAAI,QAAQ,IACV,SAAS,MAAM,CAAC;AAElB,WAAO,EAAE,QAAQ,GAAG;AAClB,aAAO,KAAK,IAAI,SAAS,KAAK;AAAA,IAC/B;AACD,WAAO;AAAA,EACR;AAGD,MAAI,YAAY;AAShB,WAAS,gBAAgB,OAAO;AAC9B,WAAO,aAAa,KAAK,KAAK,WAAW,KAAK,KAAK;AAAA,EACpD;AAGD,MAAI,gBAAgB,OAAO;AAG3B,MAAI,mBAAmB,cAAc;AAGrC,MAAI,yBAAyB,cAAc;AAoB3C,MAAI,cAAc;AAAA,IACf,WAAY;AACX,aAAO;AAAA,IACb,EAAQ;AAAA,EACL,IACG,kBACA,SAAU,OAAO;AACf,WACE,aAAa,KAAK,KAAK,iBAAiB,KAAK,OAAO,QAAQ,KAAK,CAAC,uBAAuB,KAAK,OAAO,QAAQ;AAAA,EAEhH;AAEL,QAAM,gBAAgB;AAetB,WAAS,YAAY;AACnB,WAAO;AAAA,EACR;AAGD,MAAI,gBAAgB,OAAO,WAAW,YAAY,WAAW,CAAC,QAAQ,YAAY;AAGlF,MAAI,eAAe,iBAAiB,OAAO,UAAU,YAAY,UAAU,CAAC,OAAO,YAAY;AAG/F,MAAI,kBAAkB,gBAAgB,aAAa,YAAY;AAG/D,MAAI,WAAW,kBAAkB,OAAO,SAAS;AAGjD,MAAI,iBAAiB,WAAW,SAAS,WAAW;AAmBpD,MAAI,WAAW,kBAAkB;AAEjC,QAAM,aAAa;AAGnB,MAAI,YAAY,sBACd,aAAa,kBACb,YAAY,oBACZ,YAAY,iBACZ,aAAa,kBACb,YAAY,qBACZ,WAAW,gBACX,cAAc,mBACd,cAAc,mBACd,cAAc,mBACd,WAAW,gBACX,cAAc,mBACd,eAAe;AAEjB,MAAI,mBAAmB,wBACrB,gBAAgB,qBAChB,eAAe,yBACf,eAAe,yBACf,YAAY,sBACZ,aAAa,uBACb,aAAa,uBACb,aAAa,uBACb,oBAAoB,8BACpB,cAAc,wBACd,cAAc;AAGhB,MAAI,iBAAiB,CAAE;AACvB,iBAAe,YAAY,IAAI,eAAe,YAAY,IAAI,eAAe,SAAS,IAAI,eACxF,UACJ,IAAM,eAAe,UAAU,IAAI,eAAe,UAAU,IAAI,eAAe,iBAAiB,IAAI,eAChG,WACJ,IAAM,eAAe,WAAW,IAAI;AAClC,iBAAe,SAAS,IAAI,eAAe,UAAU,IAAI,eAAe,gBAAgB,IAAI,eAC1F,SACJ,IAAM,eAAe,aAAa,IAAI,eAAe,SAAS,IAAI,eAAe,UAAU,IAAI,eAC3F,SACJ,IAAM,eAAe,QAAQ,IAAI,eAAe,WAAW,IAAI,eAAe,WAAW,IAAI,eACzF,WACJ,IAAM,eAAe,QAAQ,IAAI,eAAe,WAAW,IAAI,eAAe,YAAY,IAAI;AAS5F,WAAS,iBAAiB,OAAO;AAC/B,WAAO,aAAa,KAAK,KAAK,SAAS,MAAM,MAAM,KAAK,CAAC,CAAC,eAAe,WAAW,KAAK,CAAC;AAAA,EAC3F;AASD,WAAS,UAAU,MAAM;AACvB,WAAO,SAAU,OAAO;AACtB,aAAO,KAAK,KAAK;AAAA,IAClB;AAAA,EACF;AAGD,MAAI,gBAAgB,OAAO,WAAW,YAAY,WAAW,CAAC,QAAQ,YAAY;AAGlF,MAAI,eAAe,iBAAiB,OAAO,UAAU,YAAY,UAAU,CAAC,OAAO,YAAY;AAG/F,MAAI,kBAAkB,gBAAgB,aAAa,YAAY;AAG/D,MAAI,cAAc,mBAAmB,aAAa;AAGlD,MAAI,WAAY,WAAY;AAC1B,QAAI;AAEF,UAAI,QAAQ,gBAAgB,aAAa,WAAW,aAAa,QAAQ,MAAM,EAAE;AAEjF,UAAI,OAAO;AACT,eAAO;AAAA,MACR;AAGD,aAAO,eAAe,YAAY,WAAW,YAAY,QAAQ,MAAM;AAAA,IAC7E,SAAa,GAAP;AAAA,IAAY;AAAA,EAClB,EAAM;AAEJ,QAAM,aAAa;AAGnB,MAAI,mBAAmB,cAAc,WAAW;AAmBhD,MAAI,eAAe,mBAAmB,UAAU,gBAAgB,IAAI;AAEpE,QAAM,iBAAiB;AAGvB,MAAI,gBAAgB,OAAO;AAG3B,MAAI,mBAAmB,cAAc;AAUrC,WAAS,cAAc,OAAO,WAAW;AACvC,QAAI,QAAQ,UAAU,KAAK,GACzB,QAAQ,CAAC,SAAS,cAAc,KAAK,GACrC,SAAS,CAAC,SAAS,CAAC,SAAS,WAAW,KAAK,GAC7C,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,eAAe,KAAK,GAC5D,cAAc,SAAS,SAAS,UAAU,QAC1C,SAAS,cAAc,UAAU,MAAM,QAAQ,MAAM,IAAI,CAAE,GAC3D,SAAS,OAAO;AAElB,aAAS,OAAO,OAAO;AACrB,WACG,aAAa,iBAAiB,KAAK,OAAO,GAAG,MAC9C,EACE;AAAA,OAEC,OAAO;AAAA,MAEL,WAAW,OAAO,YAAY,OAAO;AAAA,MAErC,WAAW,OAAO,YAAY,OAAO,gBAAgB,OAAO;AAAA,MAE7D,QAAQ,KAAK,MAAM,KAEvB;AACA,eAAO,KAAK,GAAG;AAAA,MAChB;AAAA,IACF;AACD,WAAO;AAAA,EACR;AAUD,WAAS,QAAQ,MAAM,WAAW;AAChC,WAAO,SAAU,KAAK;AACpB,aAAO,KAAK,UAAU,GAAG,CAAC;AAAA,IAC3B;AAAA,EACF;AAGD,MAAI,aAAa,QAAQ,OAAO,MAAM,MAAM;AAE5C,QAAM,eAAe;AAGrB,MAAI,gBAAgB,OAAO;AAG3B,MAAI,mBAAmB,cAAc;AASrC,WAAS,SAAS,QAAQ;AACxB,QAAI,CAAC,YAAY,MAAM,GAAG;AACxB,aAAO,aAAa,MAAM;AAAA,IAC3B;AACD,QAAI,SAAS,CAAE;AACf,aAAS,OAAO,OAAO,MAAM,GAAG;AAC9B,UAAI,iBAAiB,KAAK,QAAQ,GAAG,KAAK,OAAO,eAAe;AAC9D,eAAO,KAAK,GAAG;AAAA,MAChB;AAAA,IACF;AACD,WAAO;AAAA,EACR;AA8BD,WAAS,KAAK,QAAQ;AACpB,WAAO,YAAY,MAAM,IAAI,cAAc,MAAM,IAAI,SAAS,MAAM;AAAA,EACrE;AAGD,MAAI,gBAAgB,OAAO;AAG3B,MAAI,mBAAmB,cAAc;AAkCrC,MAAI,SAAS,eAAe,SAAU,QAAQ,QAAQ;AACpD,QAAI,YAAY,MAAM,KAAK,YAAY,MAAM,GAAG;AAC9C,iBAAW,QAAQ,KAAK,MAAM,GAAG,MAAM;AACvC;AAAA,IACD;AACD,aAAS,OAAO,QAAQ;AACtB,UAAI,iBAAiB,KAAK,QAAQ,GAAG,GAAG;AACtC,oBAAY,QAAQ,KAAK,OAAO,GAAG,CAAC;AAAA,MACrC;AAAA,IACF;AAAA,EACL,CAAG;AAED,QAAM,WAAW;AAWjB,WAAS,aAAa,QAAQ;AAC5B,QAAI,SAAS,CAAE;AACf,QAAI,UAAU,MAAM;AAClB,eAAS,OAAO,OAAO,MAAM,GAAG;AAC9B,eAAO,KAAK,GAAG;AAAA,MAChB;AAAA,IACF;AACD,WAAO;AAAA,EACR;AAGD,MAAI,gBAAgB,OAAO;AAG3B,MAAI,mBAAmB,cAAc;AASrC,WAAS,WAAW,QAAQ;AAC1B,QAAI,CAAC,SAAS,MAAM,GAAG;AACrB,aAAO,aAAa,MAAM;AAAA,IAC3B;AACD,QAAI,UAAU,YAAY,MAAM,GAC9B,SAAS,CAAE;AAEb,aAAS,OAAO,QAAQ;AACtB,UAAI,EAAE,OAAO,kBAAkB,WAAW,CAAC,iBAAiB,KAAK,QAAQ,GAAG,KAAK;AAC/E,eAAO,KAAK,GAAG;AAAA,MAChB;AAAA,IACF;AACD,WAAO;AAAA,EACR;AAyBD,WAAS,OAAO,QAAQ;AACtB,WAAO,YAAY,MAAM,IAAI,cAAc,QAAQ,IAAI,IAAI,WAAW,MAAM;AAAA,EAC7E;AAGD,MAAI,eAAe,oDACjB,gBAAgB;AAUlB,WAAS,MAAM,OAAO,QAAQ;AAC5B,QAAI,UAAU,KAAK,GAAG;AACpB,aAAO;AAAA,IACR;AACD,QAAI,OAAO,OAAO;AAClB,QAAI,QAAQ,YAAY,QAAQ,YAAY,QAAQ,aAAa,SAAS,QAAQ,SAAS,KAAK,GAAG;AACjG,aAAO;AAAA,IACR;AACD,WAAO,cAAc,KAAK,KAAK,KAAK,CAAC,aAAa,KAAK,KAAK,KAAM,UAAU,QAAQ,SAAS,OAAO,MAAM;AAAA,EAC3G;AAGD,MAAI,eAAe,UAAU,QAAQ,QAAQ;AAE7C,QAAM,iBAAiB;AASvB,WAAS,YAAY;AACnB,SAAK,WAAW,iBAAiB,eAAe,IAAI,IAAI,CAAE;AAC1D,SAAK,OAAO;AAAA,EACb;AAYD,WAAS,WAAW,KAAK;AACvB,QAAI,SAAS,KAAK,IAAI,GAAG,KAAK,OAAO,KAAK,SAAS,GAAG;AACtD,SAAK,QAAQ,SAAS,IAAI;AAC1B,WAAO;AAAA,EACR;AAGD,MAAI,mBAAmB;AAGvB,MAAI,gBAAgB,OAAO;AAG3B,MAAI,mBAAmB,cAAc;AAWrC,WAAS,QAAQ,KAAK;AACpB,QAAI,OAAO,KAAK;AAChB,QAAI,gBAAgB;AAClB,UAAI,SAAS,KAAK,GAAG;AACrB,aAAO,WAAW,mBAAmB,SAAY;AAAA,IAClD;AACD,WAAO,iBAAiB,KAAK,MAAM,GAAG,IAAI,KAAK,GAAG,IAAI;AAAA,EACvD;AAGD,MAAI,gBAAgB,OAAO;AAG3B,MAAI,mBAAmB,cAAc;AAWrC,WAAS,QAAQ,KAAK;AACpB,QAAI,OAAO,KAAK;AAChB,WAAO,iBAAiB,KAAK,GAAG,MAAM,SAAY,iBAAiB,KAAK,MAAM,GAAG;AAAA,EAClF;AAGD,MAAI,mBAAmB;AAYvB,WAAS,QAAQ,KAAK,OAAO;AAC3B,QAAI,OAAO,KAAK;AAChB,SAAK,QAAQ,KAAK,IAAI,GAAG,IAAI,IAAI;AACjC,SAAK,GAAG,IAAI,kBAAkB,UAAU,SAAY,mBAAmB;AACvE,WAAO;AAAA,EACR;AASD,WAAS,KAAK,SAAS;AACrB,QAAI,QAAQ,IACV,SAAS,WAAW,OAAO,IAAI,QAAQ;AAEzC,SAAK,MAAO;AACZ,WAAO,EAAE,QAAQ,QAAQ;AACvB,UAAI,QAAQ,QAAQ,KAAK;AACzB,WAAK,IAAI,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC;AAAA,IAC5B;AAAA,EACF;AAGD,OAAK,UAAU,QAAQ;AACvB,OAAK,UAAU,QAAQ,IAAI;AAC3B,OAAK,UAAU,MAAM;AACrB,OAAK,UAAU,MAAM;AACrB,OAAK,UAAU,MAAM;AASrB,WAAS,iBAAiB;AACxB,SAAK,WAAW,CAAE;AAClB,SAAK,OAAO;AAAA,EACb;AAUD,WAAS,aAAa,OAAO,KAAK;AAChC,QAAI,SAAS,MAAM;AACnB,WAAO,UAAU;AACf,UAAI,GAAG,MAAM,MAAM,EAAE,CAAC,GAAG,GAAG,GAAG;AAC7B,eAAO;AAAA,MACR;AAAA,IACF;AACD,WAAO;AAAA,EACR;AAGD,MAAI,aAAa,MAAM;AAGvB,MAAI,SAAS,WAAW;AAWxB,WAAS,gBAAgB,KAAK;AAC5B,QAAI,OAAO,KAAK,UACd,QAAQ,aAAa,MAAM,GAAG;AAEhC,QAAI,QAAQ,GAAG;AACb,aAAO;AAAA,IACR;AACD,QAAI,YAAY,KAAK,SAAS;AAC9B,QAAI,SAAS,WAAW;AACtB,WAAK,IAAK;AAAA,IAChB,OAAW;AACL,aAAO,KAAK,MAAM,OAAO,CAAC;AAAA,IAC3B;AACD,MAAE,KAAK;AACP,WAAO;AAAA,EACR;AAWD,WAAS,aAAa,KAAK;AACzB,QAAI,OAAO,KAAK,UACd,QAAQ,aAAa,MAAM,GAAG;AAEhC,WAAO,QAAQ,IAAI,SAAY,KAAK,KAAK,EAAE,CAAC;AAAA,EAC7C;AAWD,WAAS,aAAa,KAAK;AACzB,WAAO,aAAa,KAAK,UAAU,GAAG,IAAI;AAAA,EAC3C;AAYD,WAAS,aAAa,KAAK,OAAO;AAChC,QAAI,OAAO,KAAK,UACd,QAAQ,aAAa,MAAM,GAAG;AAEhC,QAAI,QAAQ,GAAG;AACb,QAAE,KAAK;AACP,WAAK,KAAK,CAAC,KAAK,KAAK,CAAC;AAAA,IAC5B,OAAW;AACL,WAAK,KAAK,EAAE,CAAC,IAAI;AAAA,IAClB;AACD,WAAO;AAAA,EACR;AASD,WAAS,UAAU,SAAS;AAC1B,QAAI,QAAQ,IACV,SAAS,WAAW,OAAO,IAAI,QAAQ;AAEzC,SAAK,MAAO;AACZ,WAAO,EAAE,QAAQ,QAAQ;AACvB,UAAI,QAAQ,QAAQ,KAAK;AACzB,WAAK,IAAI,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC;AAAA,IAC5B;AAAA,EACF;AAGD,YAAU,UAAU,QAAQ;AAC5B,YAAU,UAAU,QAAQ,IAAI;AAChC,YAAU,UAAU,MAAM;AAC1B,YAAU,UAAU,MAAM;AAC1B,YAAU,UAAU,MAAM;AAG1B,MAAI,QAAQ,UAAU,QAAQ,KAAK;AAEnC,QAAM,QAAQ;AASd,WAAS,gBAAgB;AACvB,SAAK,OAAO;AACZ,SAAK,WAAW;AAAA,MACd,MAAM,IAAI,KAAM;AAAA,MAChB,KAAK,KAAK,SAAS,WAAY;AAAA,MAC/B,QAAQ,IAAI,KAAM;AAAA,IACnB;AAAA,EACF;AASD,WAAS,UAAU,OAAO;AACxB,QAAI,OAAO,OAAO;AAClB,WAAO,QAAQ,YAAY,QAAQ,YAAY,QAAQ,YAAY,QAAQ,YACvE,UAAU,cACV,UAAU;AAAA,EACf;AAUD,WAAS,WAAWA,MAAK,KAAK;AAC5B,QAAI,OAAOA,KAAI;AACf,WAAO,UAAU,GAAG,IAAI,KAAK,OAAO,OAAO,WAAW,WAAW,MAAM,IAAI,KAAK;AAAA,EACjF;AAWD,WAAS,eAAe,KAAK;AAC3B,QAAI,SAAS,WAAW,MAAM,GAAG,EAAE,QAAQ,EAAE,GAAG;AAChD,SAAK,QAAQ,SAAS,IAAI;AAC1B,WAAO;AAAA,EACR;AAWD,WAAS,YAAY,KAAK;AACxB,WAAO,WAAW,MAAM,GAAG,EAAE,IAAI,GAAG;AAAA,EACrC;AAWD,WAAS,YAAY,KAAK;AACxB,WAAO,WAAW,MAAM,GAAG,EAAE,IAAI,GAAG;AAAA,EACrC;AAYD,WAAS,YAAY,KAAK,OAAO;AAC/B,QAAI,OAAO,WAAW,MAAM,GAAG,GAC7B,OAAO,KAAK;AAEd,SAAK,IAAI,KAAK,KAAK;AACnB,SAAK,QAAQ,KAAK,QAAQ,OAAO,IAAI;AACrC,WAAO;AAAA,EACR;AASD,WAAS,SAAS,SAAS;AACzB,QAAI,QAAQ,IACV,SAAS,WAAW,OAAO,IAAI,QAAQ;AAEzC,SAAK,MAAO;AACZ,WAAO,EAAE,QAAQ,QAAQ;AACvB,UAAI,QAAQ,QAAQ,KAAK;AACzB,WAAK,IAAI,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC;AAAA,IAC5B;AAAA,EACF;AAGD,WAAS,UAAU,QAAQ;AAC3B,WAAS,UAAU,QAAQ,IAAI;AAC/B,WAAS,UAAU,MAAM;AACzB,WAAS,UAAU,MAAM;AACzB,WAAS,UAAU,MAAM;AAGzB,MAAI,oBAAoB;AA8CxB,WAAS,QAAQ,MAAM,UAAU;AAC/B,QAAI,OAAO,QAAQ,cAAe,YAAY,QAAQ,OAAO,YAAY,YAAa;AACpF,YAAM,IAAI,UAAU,iBAAiB;AAAA,IACtC;AACD,QAAI,WAAW,WAAY;AACzB,UAAI,OAAO,WACT,MAAM,WAAW,SAAS,MAAM,MAAM,IAAI,IAAI,KAAK,CAAC,GACpD,QAAQ,SAAS;AAEnB,UAAI,MAAM,IAAI,GAAG,GAAG;AAClB,eAAO,MAAM,IAAI,GAAG;AAAA,MACrB;AACD,UAAI,SAAS,KAAK,MAAM,MAAM,IAAI;AAClC,eAAS,QAAQ,MAAM,IAAI,KAAK,MAAM,KAAK;AAC3C,aAAO;AAAA,IACR;AACD,aAAS,QAAQ,KAAK,QAAQ,SAAS,UAAW;AAClD,WAAO;AAAA,EACR;AAGD,UAAQ,QAAQ;AAGhB,MAAI,mBAAmB;AAUvB,WAAS,cAAc,MAAM;AAC3B,QAAI,SAAS,QAAQ,MAAM,SAAU,KAAK;AACxC,UAAI,MAAM,SAAS,kBAAkB;AACnC,cAAM,MAAO;AAAA,MACd;AACD,aAAO;AAAA,IACb,CAAK;AAED,QAAI,QAAQ,OAAO;AACnB,WAAO;AAAA,EACR;AAGD,MAAI,aAAa;AAGjB,MAAI,eAAe;AASnB,MAAI,eAAe,cAAc,SAAU,QAAQ;AACjD,QAAI,SAAS,CAAE;AACf,QAAI,OAAO,WAAW,CAAC,MAAM,IAAY;AACvC,aAAO,KAAK,EAAE;AAAA,IACf;AACD,WAAO,QAAQ,YAAY,SAAU,OAAO,QAAQ,OAAO,WAAW;AACpE,aAAO,KAAK,QAAQ,UAAU,QAAQ,cAAc,IAAI,IAAI,UAAU,KAAK;AAAA,IACjF,CAAK;AACD,WAAO;AAAA,EACX,CAAG;AAED,QAAM,iBAAiB;AAuBvB,WAAS,SAAS,OAAO;AACvB,WAAO,SAAS,OAAO,KAAK,aAAa,KAAK;AAAA,EAC/C;AAUD,WAAS,SAAS,OAAO,QAAQ;AAC/B,QAAI,UAAU,KAAK,GAAG;AACpB,aAAO;AAAA,IACR;AACD,WAAO,MAAM,OAAO,MAAM,IAAI,CAAC,KAAK,IAAI,eAAe,SAAS,KAAK,CAAC;AAAA,EACvE;AAGD,MAAI,aAAa,IAAI;AASrB,WAAS,MAAM,OAAO;AACpB,QAAI,OAAO,SAAS,YAAY,SAAS,KAAK,GAAG;AAC/C,aAAO;AAAA,IACR;AACD,QAAI,SAAS,QAAQ;AACrB,WAAO,UAAU,OAAO,IAAI,SAAS,CAAC,aAAa,OAAO;AAAA,EAC3D;AAUD,WAAS,QAAQ,QAAQ,MAAM;AAC7B,WAAO,SAAS,MAAM,MAAM;AAE5B,QAAI,QAAQ,GACV,SAAS,KAAK;AAEhB,WAAO,UAAU,QAAQ,QAAQ,QAAQ;AACvC,eAAS,OAAO,MAAM,KAAK,OAAO,CAAC,CAAC;AAAA,IACrC;AACD,WAAO,SAAS,SAAS,SAAS,SAAS;AAAA,EAC5C;AA2BD,WAAS,IAAI,QAAQ,MAAM,cAAc;AACvC,QAAI,SAAS,UAAU,OAAO,SAAY,QAAQ,QAAQ,IAAI;AAC9D,WAAO,WAAW,SAAY,eAAe;AAAA,EAC9C;AAUD,WAAS,UAAU,OAAOC,SAAQ;AAChC,QAAI,QAAQ,IACV,SAASA,QAAO,QAChB,SAAS,MAAM;AAEjB,WAAO,EAAE,QAAQ,QAAQ;AACvB,YAAM,SAAS,KAAK,IAAIA,QAAO,KAAK;AAAA,IACrC;AACD,WAAO;AAAA,EACR;AAGD,MAAI,mBAAmB,WAAW,SAAS,qBAAqB;AAShE,WAAS,cAAc,OAAO;AAC5B,WAAO,UAAU,KAAK,KAAK,cAAc,KAAK,KAAK,CAAC,EAAE,oBAAoB,SAAS,MAAM,gBAAgB;AAAA,EAC1G;AAaD,WAAS,YAAY,OAAO,OAAO,WAAW,UAAU,QAAQ;AAC9D,QAAI,QAAQ,IACV,SAAS,MAAM;AAEjB,kBAAc,YAAY;AAC1B,eAAW,SAAS;AAEpB,WAAO,EAAE,QAAQ,QAAQ;AACvB,UAAI,QAAQ,MAAM,KAAK;AACvB,UAAI,QAAQ,KAAK,UAAU,KAAK,GAAG;AACjC,YAAI,QAAQ,GAAG;AAEb,sBAAY,OAAO,QAAQ,GAAG,WAAW,UAAU,MAAM;AAAA,QACnE,OAAe;AACL,oBAAU,QAAQ,KAAK;AAAA,QACxB;AAAA,MACT,WAAiB,CAAC,UAAU;AACpB,eAAO,OAAO,MAAM,IAAI;AAAA,MACzB;AAAA,IACF;AACD,WAAO;AAAA,EACR;AAgBD,WAAS,QAAQ,OAAO;AACtB,QAAI,SAAS,SAAS,OAAO,IAAI,MAAM;AACvC,WAAO,SAAS,YAAY,OAAO,CAAC,IAAI,CAAE;AAAA,EAC3C;AAGD,MAAI,eAAe,QAAQ,OAAO,gBAAgB,MAAM;AAExD,QAAM,iBAAiB;AAWvB,WAAS,UAAU,OAAO,OAAO,KAAK;AACpC,QAAI,QAAQ,IACV,SAAS,MAAM;AAEjB,QAAI,QAAQ,GAAG;AACb,cAAQ,CAAC,QAAQ,SAAS,IAAI,SAAS;AAAA,IACxC;AACD,UAAM,MAAM,SAAS,SAAS;AAC9B,QAAI,MAAM,GAAG;AACX,aAAO;AAAA,IACR;AACD,aAAS,QAAQ,MAAM,IAAK,MAAM,UAAW;AAC7C,eAAW;AAEX,QAAI,SAAS,MAAM,MAAM;AACzB,WAAO,EAAE,QAAQ,QAAQ;AACvB,aAAO,KAAK,IAAI,MAAM,QAAQ,KAAK;AAAA,IACpC;AACD,WAAO;AAAA,EACR;AAcD,WAAS,YAAY,OAAO,UAAU,aAAa,WAAW;AAC5D,QAAI,QAAQ,IACV,SAAS,SAAS,OAAO,IAAI,MAAM;AAErC,QAAI,aAAa,QAAQ;AACvB,oBAAc,MAAM,EAAE,KAAK;AAAA,IAC5B;AACD,WAAO,EAAE,QAAQ,QAAQ;AACvB,oBAAc,SAAS,aAAa,MAAM,KAAK,GAAG,OAAO,KAAK;AAAA,IAC/D;AACD,WAAO;AAAA,EACR;AASD,WAAS,aAAa;AACpB,SAAK,WAAW,IAAI,UAAW;AAC/B,SAAK,OAAO;AAAA,EACb;AAWD,WAAS,YAAY,KAAK;AACxB,QAAI,OAAO,KAAK,UACd,SAAS,KAAK,QAAQ,EAAE,GAAG;AAE7B,SAAK,OAAO,KAAK;AACjB,WAAO;AAAA,EACR;AAWD,WAAS,SAAS,KAAK;AACrB,WAAO,KAAK,SAAS,IAAI,GAAG;AAAA,EAC7B;AAWD,WAAS,SAAS,KAAK;AACrB,WAAO,KAAK,SAAS,IAAI,GAAG;AAAA,EAC7B;AAGD,MAAI,qBAAqB;AAYzB,WAAS,SAAS,KAAK,OAAO;AAC5B,QAAI,OAAO,KAAK;AAChB,QAAI,gBAAgB,WAAW;AAC7B,UAAI,QAAQ,KAAK;AACjB,UAAI,CAAC,SAAS,MAAM,SAAS,qBAAqB,GAAG;AACnD,cAAM,KAAK,CAAC,KAAK,KAAK,CAAC;AACvB,aAAK,OAAO,EAAE,KAAK;AACnB,eAAO;AAAA,MACR;AACD,aAAO,KAAK,WAAW,IAAI,SAAS,KAAK;AAAA,IAC1C;AACD,SAAK,IAAI,KAAK,KAAK;AACnB,SAAK,OAAO,KAAK;AACjB,WAAO;AAAA,EACR;AASD,WAAS,MAAM,SAAS;AACtB,QAAI,OAAQ,KAAK,WAAW,IAAI,UAAU,OAAO;AACjD,SAAK,OAAO,KAAK;AAAA,EAClB;AAGD,QAAM,UAAU,QAAQ;AACxB,QAAM,UAAU,QAAQ,IAAI;AAC5B,QAAM,UAAU,MAAM;AACtB,QAAM,UAAU,MAAM;AACtB,QAAM,UAAU,MAAM;AAWtB,WAAS,WAAW,QAAQ,QAAQ;AAClC,WAAO,UAAU,WAAW,QAAQ,KAAK,MAAM,GAAG,MAAM;AAAA,EACzD;AAWD,WAAS,aAAa,QAAQ,QAAQ;AACpC,WAAO,UAAU,WAAW,QAAQ,OAAO,MAAM,GAAG,MAAM;AAAA,EAC3D;AAGD,MAAI,cAAc,OAAO,WAAW,YAAY,WAAW,CAAC,QAAQ,YAAY;AAGhF,MAAI,aAAa,eAAe,OAAO,UAAU,YAAY,UAAU,CAAC,OAAO,YAAY;AAG3F,MAAI,gBAAgB,cAAc,WAAW,YAAY;AAGzD,MAAI,SAAS,gBAAgB,OAAO,SAAS,QAC3C,cAAc,SAAS,OAAO,cAAc;AAU9C,WAAS,YAAY,QAAQ,QAAQ;AACnC,QAAI,QAAQ;AACV,aAAO,OAAO,MAAO;AAAA,IACtB;AACD,QAAI,SAAS,OAAO,QAClB,SAAS,cAAc,YAAY,MAAM,IAAI,IAAI,OAAO,YAAY,MAAM;AAE5E,WAAO,KAAK,MAAM;AAClB,WAAO;AAAA,EACR;AAWD,WAAS,YAAY,OAAO,WAAW;AACrC,QAAI,QAAQ,IACV,SAAS,SAAS,OAAO,IAAI,MAAM,QACnC,WAAW,GACX,SAAS,CAAE;AAEb,WAAO,EAAE,QAAQ,QAAQ;AACvB,UAAI,QAAQ,MAAM,KAAK;AACvB,UAAI,UAAU,OAAO,OAAO,KAAK,GAAG;AAClC,eAAO,UAAU,IAAI;AAAA,MACtB;AAAA,IACF;AACD,WAAO;AAAA,EACR;AAoBD,WAAS,YAAY;AACnB,WAAO,CAAE;AAAA,EACV;AAGD,MAAI,gBAAgB,OAAO;AAG3B,MAAI,uBAAuB,cAAc;AAGzC,MAAI,qBAAqB,OAAO;AAShC,MAAI,aAAa,CAAC,qBACd,YACA,SAAU,QAAQ;AAChB,QAAI,UAAU,MAAM;AAClB,aAAO,CAAE;AAAA,IACV;AACD,aAAS,OAAO,MAAM;AACtB,WAAO,YAAY,mBAAmB,MAAM,GAAG,SAAU,QAAQ;AAC/D,aAAO,qBAAqB,KAAK,QAAQ,MAAM;AAAA,IACzD,CAAS;AAAA,EACF;AAEL,QAAM,eAAe;AAUrB,WAAS,YAAY,QAAQ,QAAQ;AACnC,WAAO,WAAW,QAAQ,aAAa,MAAM,GAAG,MAAM;AAAA,EACvD;AAGD,MAAI,mBAAmB,OAAO;AAS9B,MAAI,eAAe,CAAC,mBAChB,YACA,SAAU,QAAQ;AAChB,QAAI,SAAS,CAAE;AACf,WAAO,QAAQ;AACb,gBAAU,QAAQ,aAAa,MAAM,CAAC;AACtC,eAAS,eAAe,MAAM;AAAA,IAC/B;AACD,WAAO;AAAA,EACR;AAEL,QAAM,iBAAiB;AAUvB,WAAS,cAAc,QAAQ,QAAQ;AACrC,WAAO,WAAW,QAAQ,eAAe,MAAM,GAAG,MAAM;AAAA,EACzD;AAaD,WAAS,eAAe,QAAQ,UAAU,aAAa;AACrD,QAAI,SAAS,SAAS,MAAM;AAC5B,WAAO,UAAU,MAAM,IAAI,SAAS,UAAU,QAAQ,YAAY,MAAM,CAAC;AAAA,EAC1E;AASD,WAAS,WAAW,QAAQ;AAC1B,WAAO,eAAe,QAAQ,MAAM,YAAY;AAAA,EACjD;AAUD,WAAS,aAAa,QAAQ;AAC5B,WAAO,eAAe,QAAQ,QAAQ,cAAc;AAAA,EACrD;AAGD,MAAI,WAAW,UAAU,QAAQ,UAAU;AAE3C,QAAM,aAAa;AAGnB,MAAI,YAAY,UAAU,QAAQ,SAAS;AAE3C,QAAM,YAAY;AAGlB,MAAI,MAAM,UAAU,QAAQ,KAAK;AAEjC,QAAM,QAAQ;AAGd,MAAI,WAAW,gBACb,cAAc,mBACd,aAAa,oBACb,WAAW,gBACX,eAAe;AAEjB,MAAI,gBAAgB;AAGpB,MAAI,qBAAqB,SAAS,UAAU,GAC1C,gBAAgB,SAAS,KAAK,GAC9B,oBAAoB,SAAS,SAAS,GACtC,gBAAgB,SAAS,KAAK,GAC9B,oBAAoB,SAAS,SAAS;AASxC,MAAI,SAAS;AAGb,MACG,cAAc,OAAO,IAAI,WAAW,IAAI,YAAY,CAAC,CAAC,CAAC,KAAK,iBAC5D,SAAS,OAAO,IAAI,MAAO,CAAA,KAAK,YAChC,aAAa,OAAO,UAAU,QAAS,CAAA,KAAK,cAC5C,SAAS,OAAO,IAAI,MAAO,CAAA,KAAK,YAChC,aAAa,OAAO,IAAI,UAAW,CAAA,KAAK,cACzC;AACA,aAAS,SAAU,OAAO;AACxB,UAAI,SAAS,WAAW,KAAK,GAC3B,OAAO,UAAU,cAAc,MAAM,cAAc,QACnD,aAAa,OAAO,SAAS,IAAI,IAAI;AAEvC,UAAI,YAAY;AACd,gBAAQ,YAAU;AAAA,UAChB,KAAK;AACH,mBAAO;AAAA,UACT,KAAK;AACH,mBAAO;AAAA,UACT,KAAK;AACH,mBAAO;AAAA,UACT,KAAK;AACH,mBAAO;AAAA,UACT,KAAK;AACH,mBAAO;AAAA,QACV;AAAA,MACF;AACD,aAAO;AAAA,IACR;AAAA,EACF;AAED,QAAM,WAAW;AAGjB,MAAI,gBAAgB,OAAO;AAG3B,MAAI,mBAAmB,cAAc;AASrC,WAAS,eAAe,OAAO;AAC7B,QAAI,SAAS,MAAM,QACjB,SAAS,IAAI,MAAM,YAAY,MAAM;AAGvC,QAAI,UAAU,OAAO,MAAM,CAAC,KAAK,YAAY,iBAAiB,KAAK,OAAO,OAAO,GAAG;AAClF,aAAO,QAAQ,MAAM;AACrB,aAAO,QAAQ,MAAM;AAAA,IACtB;AACD,WAAO;AAAA,EACR;AAGD,MAAI,aAAa,OAAO;AAExB,QAAM,eAAe;AASrB,WAAS,iBAAiB,aAAa;AACrC,QAAI,SAAS,IAAI,YAAY,YAAY,YAAY,UAAU;AAC/D,QAAI,aAAa,MAAM,EAAE,IAAI,IAAI,aAAa,WAAW,CAAC;AAC1D,WAAO;AAAA,EACR;AAUD,WAAS,cAAc,UAAU,QAAQ;AACvC,QAAI,SAAS,SAAS,iBAAiB,SAAS,MAAM,IAAI,SAAS;AACnE,WAAO,IAAI,SAAS,YAAY,QAAQ,SAAS,YAAY,SAAS,UAAU;AAAA,EACjF;AAGD,MAAI,UAAU;AASd,WAAS,YAAY,QAAQ;AAC3B,QAAI,SAAS,IAAI,OAAO,YAAY,OAAO,QAAQ,QAAQ,KAAK,MAAM,CAAC;AACvE,WAAO,YAAY,OAAO;AAC1B,WAAO;AAAA,EACR;AAGD,MAAI,gBAAgB,WAAW,SAAS,YAAY,QAClD,kBAAkB,gBAAgB,cAAc,UAAU;AAS5D,WAAS,YAAY,QAAQ;AAC3B,WAAO,kBAAkB,OAAO,gBAAgB,KAAK,MAAM,CAAC,IAAI,CAAE;AAAA,EACnE;AAUD,WAAS,gBAAgB,YAAY,QAAQ;AAC3C,QAAI,SAAS,SAAS,iBAAiB,WAAW,MAAM,IAAI,WAAW;AACvE,WAAO,IAAI,WAAW,YAAY,QAAQ,WAAW,YAAY,WAAW,MAAM;AAAA,EACnF;AAGD,MAAI,YAAY,oBACd,YAAY,iBACZ,WAAW,gBACX,cAAc,mBACd,cAAc,mBACd,WAAW,gBACX,cAAc,mBACd,cAAc;AAEhB,MAAI,mBAAmB,wBACrB,gBAAgB,qBAChB,eAAe,yBACf,eAAe,yBACf,YAAY,sBACZ,aAAa,uBACb,aAAa,uBACb,aAAa,uBACb,oBAAoB,8BACpB,cAAc,wBACd,cAAc;AAchB,WAAS,eAAe,QAAQ,KAAK,QAAQ;AAC3C,QAAI,OAAO,OAAO;AAClB,YAAQ,KAAG;AAAA,MACT,KAAK;AACH,eAAO,iBAAiB,MAAM;AAAA,MAEhC,KAAK;AAAA,MACL,KAAK;AACH,eAAO,IAAI,KAAK,CAAC,MAAM;AAAA,MAEzB,KAAK;AACH,eAAO,cAAc,QAAQ,MAAM;AAAA,MAErC,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACH,eAAO,gBAAgB,QAAQ,MAAM;AAAA,MAEvC,KAAK;AACH,eAAO,IAAI,KAAM;AAAA,MAEnB,KAAK;AAAA,MACL,KAAK;AACH,eAAO,IAAI,KAAK,MAAM;AAAA,MAExB,KAAK;AACH,eAAO,YAAY,MAAM;AAAA,MAE3B,KAAK;AACH,eAAO,IAAI,KAAM;AAAA,MAEnB,KAAK;AACH,eAAO,YAAY,MAAM;AAAA,IAC5B;AAAA,EACF;AASD,WAAS,gBAAgB,QAAQ;AAC/B,WAAO,OAAO,OAAO,eAAe,cAAc,CAAC,YAAY,MAAM,IAAI,aAAa,eAAe,MAAM,CAAC,IAAI,CAAE;AAAA,EACnH;AAGD,MAAI,WAAW;AASf,WAAS,UAAU,OAAO;AACxB,WAAO,aAAa,KAAK,KAAK,SAAS,KAAK,KAAK;AAAA,EAClD;AAGD,MAAI,YAAY,cAAc,WAAW;AAmBzC,MAAI,QAAQ,YAAY,UAAU,SAAS,IAAI;AAE/C,QAAM,UAAU;AAGhB,MAAI,WAAW;AASf,WAAS,UAAU,OAAO;AACxB,WAAO,aAAa,KAAK,KAAK,SAAS,KAAK,KAAK;AAAA,EAClD;AAGD,MAAI,YAAY,cAAc,WAAW;AAmBzC,MAAI,QAAQ,YAAY,UAAU,SAAS,IAAI;AAE/C,QAAM,UAAU;AAGhB,MAAI,kBAAkB,GACpB,kBAAkB,GAClB,uBAAuB;AAGzB,MAAI,YAAY,sBACd,aAAa,kBACb,YAAY,oBACZ,YAAY,iBACZ,aAAa,kBACb,UAAU,qBACV,SAAS,8BACT,WAAW,gBACX,cAAc,mBACd,cAAc,mBACd,cAAc,mBACd,WAAW,gBACX,cAAc,mBACd,cAAc,mBACd,aAAa;AAEf,MAAI,mBAAmB,wBACrB,gBAAgB,qBAChB,aAAa,yBACb,aAAa,yBACb,UAAU,sBACV,WAAW,uBACX,WAAW,uBACX,WAAW,uBACX,kBAAkB,8BAClB,YAAY,wBACZ,YAAY;AAGd,MAAI,gBAAgB,CAAE;AACtB,gBAAc,SAAS,IAAI,cAAc,UAAU,IAAI,cAAc,gBAAgB,IAAI,cACvF,aACJ,IAAM,cAAc,SAAS,IAAI,cAAc,SAAS,IAAI,cAAc,UAAU,IAAI,cACpF,UACJ,IAAM,cAAc,OAAO,IAAI,cAAc,QAAQ,IAAI,cAAc,QAAQ,IAAI,cAC/E,QACJ,IAAM,cAAc,WAAW,IAAI,cAAc,WAAW,IAAI,cAAc,WAAW,IAAI,cACzF,QACJ,IAAM,cAAc,WAAW,IAAI,cAAc,WAAW,IAAI,cAAc,QAAQ,IAAI,cACtF,eACD,IAAG,cAAc,SAAS,IAAI,cAAc,SAAS,IAAI;AAC1D,gBAAc,UAAU,IAAI,cAAc,OAAO,IAAI,cAAc,UAAU,IAAI;AAkBjF,WAAS,UAAU,OAAO,SAAS,YAAY,KAAK,QAAQ,OAAO;AACjE,QAAI,QACF,SAAS,UAAU,iBACnB,SAAS,UAAU,iBACnB,SAAS,UAAU;AAErB,QAAI,YAAY;AACd,eAAS,SAAS,WAAW,OAAO,KAAK,QAAQ,KAAK,IAAI,WAAW,KAAK;AAAA,IAC3E;AACD,QAAI,WAAW,QAAW;AACxB,aAAO;AAAA,IACR;AACD,QAAI,CAAC,SAAS,KAAK,GAAG;AACpB,aAAO;AAAA,IACR;AACD,QAAI,QAAQ,UAAU,KAAK;AAC3B,QAAI,OAAO;AACT,eAAS,eAAe,KAAK;AAC7B,UAAI,CAAC,QAAQ;AACX,eAAO,UAAU,OAAO,MAAM;AAAA,MAC/B;AAAA,IACP,OAAW;AACL,UAAI,MAAM,SAAS,KAAK,GACtB,SAAS,OAAO,WAAW,OAAO;AAEpC,UAAI,WAAW,KAAK,GAAG;AACrB,eAAO,YAAY,OAAO,MAAM;AAAA,MACjC;AACD,UAAI,OAAO,eAAe,OAAO,aAAc,UAAU,CAAC,QAAS;AACjE,iBAAS,UAAU,SAAS,CAAA,IAAK,gBAAgB,KAAK;AACtD,YAAI,CAAC,QAAQ;AACX,iBAAO,SACH,cAAc,OAAO,aAAa,QAAQ,KAAK,CAAC,IAChD,YAAY,OAAO,WAAW,QAAQ,KAAK,CAAC;AAAA,QACjD;AAAA,MACT,OAAa;AACL,YAAI,CAAC,cAAc,GAAG,GAAG;AACvB,iBAAO,SAAS,QAAQ,CAAE;AAAA,QAC3B;AACD,iBAAS,eAAe,OAAO,KAAK,MAAM;AAAA,MAC3C;AAAA,IACF;AAED,cAAU,QAAQ,IAAI;AACtB,QAAI,UAAU,MAAM,IAAI,KAAK;AAC7B,QAAI,SAAS;AACX,aAAO;AAAA,IACR;AACD,UAAM,IAAI,OAAO,MAAM;AAEvB,QAAI,QAAQ,KAAK,GAAG;AAClB,YAAM,QAAQ,SAAU,UAAU;AAChC,eAAO,IAAI,UAAU,UAAU,SAAS,YAAY,UAAU,OAAO,KAAK,CAAC;AAAA,MACnF,CAAO;AAAA,IACP,WAAe,QAAQ,KAAK,GAAG;AACzB,YAAM,QAAQ,SAAU,UAAUC,MAAK;AACrC,eAAO,IAAIA,MAAK,UAAU,UAAU,SAAS,YAAYA,MAAK,OAAO,KAAK,CAAC;AAAA,MACnF,CAAO;AAAA,IACF;AAED,QAAI,WAAW,SAAU,SAAS,eAAe,aAAc,SAAS,SAAS;AAEjF,QAAI,QAAQ,QAAQ,SAAY,SAAS,KAAK;AAC9C,cAAU,SAAS,OAAO,SAAU,UAAUA,MAAK;AACjD,UAAI,OAAO;AACT,QAAAA,OAAM;AACN,mBAAW,MAAMA,IAAG;AAAA,MACrB;AAED,kBAAY,QAAQA,MAAK,UAAU,UAAU,SAAS,YAAYA,MAAK,OAAO,KAAK,CAAC;AAAA,IAC1F,CAAK;AACD,WAAO;AAAA,EACR;AAGD,MAAI,qBAAqB;AA4BzB,WAAS,MAAM,OAAO;AACpB,WAAO,UAAU,OAAO,kBAAkB;AAAA,EAC3C;AAiBD,WAAS,QAAQ,OAAO;AACtB,QAAI,QAAQ,IACV,SAAS,SAAS,OAAO,IAAI,MAAM,QACnC,WAAW,GACX,SAAS,CAAE;AAEb,WAAO,EAAE,QAAQ,QAAQ;AACvB,UAAI,QAAQ,MAAM,KAAK;AACvB,UAAI,OAAO;AACT,eAAO,UAAU,IAAI;AAAA,MACtB;AAAA,IACF;AACD,WAAO;AAAA,EACR;AAGD,MAAI,iBAAiB;AAYrB,WAAS,YAAY,OAAO;AAC1B,SAAK,SAAS,IAAI,OAAO,cAAc;AACvC,WAAO;AAAA,EACR;AAWD,WAAS,YAAY,OAAO;AAC1B,WAAO,KAAK,SAAS,IAAI,KAAK;AAAA,EAC/B;AAUD,WAAS,SAASD,SAAQ;AACxB,QAAI,QAAQ,IACV,SAASA,WAAU,OAAO,IAAIA,QAAO;AAEvC,SAAK,WAAW,IAAI,SAAU;AAC9B,WAAO,EAAE,QAAQ,QAAQ;AACvB,WAAK,IAAIA,QAAO,KAAK,CAAC;AAAA,IACvB;AAAA,EACF;AAGD,WAAS,UAAU,MAAM,SAAS,UAAU,OAAO;AACnD,WAAS,UAAU,MAAM;AAYzB,WAAS,UAAU,OAAO,WAAW;AACnC,QAAI,QAAQ,IACV,SAAS,SAAS,OAAO,IAAI,MAAM;AAErC,WAAO,EAAE,QAAQ,QAAQ;AACvB,UAAI,UAAU,MAAM,KAAK,GAAG,OAAO,KAAK,GAAG;AACzC,eAAO;AAAA,MACR;AAAA,IACF;AACD,WAAO;AAAA,EACR;AAUD,WAAS,SAAS,OAAO,KAAK;AAC5B,WAAO,MAAM,IAAI,GAAG;AAAA,EACrB;AAGD,MAAI,yBAAyB,GAC3B,2BAA2B;AAe7B,WAAS,YAAY,OAAO,OAAO,SAAS,YAAY,WAAW,OAAO;AACxE,QAAI,YAAY,UAAU,wBACxB,YAAY,MAAM,QAClB,YAAY,MAAM;AAEpB,QAAI,aAAa,aAAa,EAAE,aAAa,YAAY,YAAY;AACnE,aAAO;AAAA,IACR;AAED,QAAI,aAAa,MAAM,IAAI,KAAK;AAChC,QAAI,aAAa,MAAM,IAAI,KAAK;AAChC,QAAI,cAAc,YAAY;AAC5B,aAAO,cAAc,SAAS,cAAc;AAAA,IAC7C;AACD,QAAI,QAAQ,IACV,SAAS,MACT,OAAO,UAAU,2BAA2B,IAAI,SAAU,IAAG;AAE/D,UAAM,IAAI,OAAO,KAAK;AACtB,UAAM,IAAI,OAAO,KAAK;AAGtB,WAAO,EAAE,QAAQ,WAAW;AAC1B,UAAI,WAAW,MAAM,KAAK,GACxB,WAAW,MAAM,KAAK;AAExB,UAAI,YAAY;AACd,YAAI,WAAW,YACX,WAAW,UAAU,UAAU,OAAO,OAAO,OAAO,KAAK,IACzD,WAAW,UAAU,UAAU,OAAO,OAAO,OAAO,KAAK;AAAA,MAC9D;AACD,UAAI,aAAa,QAAW;AAC1B,YAAI,UAAU;AACZ;AAAA,QACD;AACD,iBAAS;AACT;AAAA,MACD;AAED,UAAI,MAAM;AACR,YACE,CAAC,UAAU,OAAO,SAAUE,WAAU,UAAU;AAC9C,cACE,CAAC,SAAS,MAAM,QAAQ,MACvB,aAAaA,aAAY,UAAU,UAAUA,WAAU,SAAS,YAAY,KAAK,IAClF;AACA,mBAAO,KAAK,KAAK,QAAQ;AAAA,UAC1B;AAAA,QACb,CAAW,GACD;AACA,mBAAS;AACT;AAAA,QACD;AAAA,MACF,WAAU,EAAE,aAAa,YAAY,UAAU,UAAU,UAAU,SAAS,YAAY,KAAK,IAAI;AAChG,iBAAS;AACT;AAAA,MACD;AAAA,IACF;AACD,UAAM,QAAQ,EAAE,KAAK;AACrB,UAAM,QAAQ,EAAE,KAAK;AACrB,WAAO;AAAA,EACR;AASD,WAAS,WAAWH,MAAK;AACvB,QAAI,QAAQ,IACV,SAAS,MAAMA,KAAI,IAAI;AAEzB,IAAAA,KAAI,QAAQ,SAAU,OAAO,KAAK;AAChC,aAAO,EAAE,KAAK,IAAI,CAAC,KAAK,KAAK;AAAA,IACnC,CAAK;AACD,WAAO;AAAA,EACR;AASD,WAAS,WAAW,KAAK;AACvB,QAAI,QAAQ,IACV,SAAS,MAAM,IAAI,IAAI;AAEzB,QAAI,QAAQ,SAAU,OAAO;AAC3B,aAAO,EAAE,KAAK,IAAI;AAAA,IACxB,CAAK;AACD,WAAO;AAAA,EACR;AAGD,MAAI,yBAAyB,GAC3B,2BAA2B;AAG7B,MAAI,UAAU,oBACZ,UAAU,iBACV,WAAW,kBACX,WAAW,gBACX,YAAY,mBACZ,cAAc,mBACd,WAAW,gBACX,cAAc,mBACd,YAAY;AAEd,MAAI,iBAAiB,wBACnB,cAAc;AAGhB,MAAI,cAAc,WAAW,SAAS,YAAY,QAChD,gBAAgB,cAAc,YAAY,UAAU;AAmBtD,WAAS,WAAW,QAAQ,OAAO,KAAK,SAAS,YAAY,WAAW,OAAO;AAC7E,YAAQ,KAAG;AAAA,MACT,KAAK;AACH,YAAI,OAAO,cAAc,MAAM,cAAc,OAAO,cAAc,MAAM,YAAY;AAClF,iBAAO;AAAA,QACR;AACD,iBAAS,OAAO;AAChB,gBAAQ,MAAM;AAAA,MAEhB,KAAK;AACH,YAAI,OAAO,cAAc,MAAM,cAAc,CAAC,UAAU,IAAI,aAAa,MAAM,GAAG,IAAI,aAAa,KAAK,CAAC,GAAG;AAC1G,iBAAO;AAAA,QACR;AACD,eAAO;AAAA,MAET,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAGH,eAAO,GAAG,CAAC,QAAQ,CAAC,KAAK;AAAA,MAE3B,KAAK;AACH,eAAO,OAAO,QAAQ,MAAM,QAAQ,OAAO,WAAW,MAAM;AAAA,MAE9D,KAAK;AAAA,MACL,KAAK;AAIH,eAAO,UAAU,QAAQ;AAAA,MAE3B,KAAK;AACH,YAAI,UAAU;AAAA,MAEhB,KAAK;AACH,YAAI,YAAY,UAAU;AAC1B,oBAAY,UAAU;AAEtB,YAAI,OAAO,QAAQ,MAAM,QAAQ,CAAC,WAAW;AAC3C,iBAAO;AAAA,QACR;AAED,YAAI,UAAU,MAAM,IAAI,MAAM;AAC9B,YAAI,SAAS;AACX,iBAAO,WAAW;AAAA,QACnB;AACD,mBAAW;AAGX,cAAM,IAAI,QAAQ,KAAK;AACvB,YAAI,SAAS,YAAY,QAAQ,MAAM,GAAG,QAAQ,KAAK,GAAG,SAAS,YAAY,WAAW,KAAK;AAC/F,cAAM,QAAQ,EAAE,MAAM;AACtB,eAAO;AAAA,MAET,KAAK;AACH,YAAI,eAAe;AACjB,iBAAO,cAAc,KAAK,MAAM,KAAK,cAAc,KAAK,KAAK;AAAA,QAC9D;AAAA,IACJ;AACD,WAAO;AAAA,EACR;AAGD,MAAI,yBAAyB;AAG7B,MAAI,gBAAgB,OAAO;AAG3B,MAAI,mBAAmB,cAAc;AAerC,WAAS,aAAa,QAAQ,OAAO,SAAS,YAAY,WAAW,OAAO;AAC1E,QAAI,YAAY,UAAU,wBACxB,WAAW,WAAW,MAAM,GAC5B,YAAY,SAAS,QACrB,WAAW,WAAW,KAAK,GAC3B,YAAY,SAAS;AAEvB,QAAI,aAAa,aAAa,CAAC,WAAW;AACxC,aAAO;AAAA,IACR;AACD,QAAI,QAAQ;AACZ,WAAO,SAAS;AACd,UAAI,MAAM,SAAS,KAAK;AACxB,UAAI,EAAE,YAAY,OAAO,QAAQ,iBAAiB,KAAK,OAAO,GAAG,IAAI;AACnE,eAAO;AAAA,MACR;AAAA,IACF;AAED,QAAI,aAAa,MAAM,IAAI,MAAM;AACjC,QAAI,aAAa,MAAM,IAAI,KAAK;AAChC,QAAI,cAAc,YAAY;AAC5B,aAAO,cAAc,SAAS,cAAc;AAAA,IAC7C;AACD,QAAI,SAAS;AACb,UAAM,IAAI,QAAQ,KAAK;AACvB,UAAM,IAAI,OAAO,MAAM;AAEvB,QAAI,WAAW;AACf,WAAO,EAAE,QAAQ,WAAW;AAC1B,YAAM,SAAS,KAAK;AACpB,UAAI,WAAW,OAAO,GAAG,GACvB,WAAW,MAAM,GAAG;AAEtB,UAAI,YAAY;AACd,YAAI,WAAW,YACX,WAAW,UAAU,UAAU,KAAK,OAAO,QAAQ,KAAK,IACxD,WAAW,UAAU,UAAU,KAAK,QAAQ,OAAO,KAAK;AAAA,MAC7D;AAED,UACE,EAAE,aAAa,SACX,aAAa,YAAY,UAAU,UAAU,UAAU,SAAS,YAAY,KAAK,IACjF,WACJ;AACA,iBAAS;AACT;AAAA,MACD;AACD,mBAAa,WAAW,OAAO;AAAA,IAChC;AACD,QAAI,UAAU,CAAC,UAAU;AACvB,UAAI,UAAU,OAAO,aACnB,UAAU,MAAM;AAGlB,UACE,WAAW,WACX,iBAAiB,UACjB,iBAAiB,SACjB,EACE,OAAO,WAAW,cAClB,mBAAmB,WACnB,OAAO,WAAW,cAClB,mBAAmB,UAErB;AACA,iBAAS;AAAA,MACV;AAAA,IACF;AACD,UAAM,QAAQ,EAAE,MAAM;AACtB,UAAM,QAAQ,EAAE,KAAK;AACrB,WAAO;AAAA,EACR;AAGD,MAAI,yBAAyB;AAG7B,MAAI,UAAU,sBACZ,WAAW,kBACX,YAAY;AAGd,MAAI,gBAAgB,OAAO;AAG3B,MAAI,mBAAmB,cAAc;AAgBrC,WAAS,gBAAgB,QAAQ,OAAO,SAAS,YAAY,WAAW,OAAO;AAC7E,QAAI,WAAW,UAAU,MAAM,GAC7B,WAAW,UAAU,KAAK,GAC1B,SAAS,WAAW,WAAW,SAAS,MAAM,GAC9C,SAAS,WAAW,WAAW,SAAS,KAAK;AAE/C,aAAS,UAAU,UAAU,YAAY;AACzC,aAAS,UAAU,UAAU,YAAY;AAEzC,QAAI,WAAW,UAAU,WACvB,WAAW,UAAU,WACrB,YAAY,UAAU;AAExB,QAAI,aAAa,WAAW,MAAM,GAAG;AACnC,UAAI,CAAC,WAAW,KAAK,GAAG;AACtB,eAAO;AAAA,MACR;AACD,iBAAW;AACX,iBAAW;AAAA,IACZ;AACD,QAAI,aAAa,CAAC,UAAU;AAC1B,gBAAU,QAAQ,IAAI;AACtB,aAAO,YAAY,eAAe,MAAM,IACpC,YAAY,QAAQ,OAAO,SAAS,YAAY,WAAW,KAAK,IAChE,WAAW,QAAQ,OAAO,QAAQ,SAAS,YAAY,WAAW,KAAK;AAAA,IAC5E;AACD,QAAI,EAAE,UAAU,yBAAyB;AACvC,UAAI,eAAe,YAAY,iBAAiB,KAAK,QAAQ,aAAa,GACxE,eAAe,YAAY,iBAAiB,KAAK,OAAO,aAAa;AAEvE,UAAI,gBAAgB,cAAc;AAChC,YAAI,eAAe,eAAe,OAAO,MAAO,IAAG,QACjD,eAAe,eAAe,MAAM,MAAO,IAAG;AAEhD,kBAAU,QAAQ,IAAI;AACtB,eAAO,UAAU,cAAc,cAAc,SAAS,YAAY,KAAK;AAAA,MACxE;AAAA,IACF;AACD,QAAI,CAAC,WAAW;AACd,aAAO;AAAA,IACR;AACD,cAAU,QAAQ,IAAI;AACtB,WAAO,aAAa,QAAQ,OAAO,SAAS,YAAY,WAAW,KAAK;AAAA,EACzE;AAgBD,WAAS,YAAY,OAAO,OAAO,SAAS,YAAY,OAAO;AAC7D,QAAI,UAAU,OAAO;AACnB,aAAO;AAAA,IACR;AACD,QAAI,SAAS,QAAQ,SAAS,QAAS,CAAC,aAAa,KAAK,KAAK,CAAC,aAAa,KAAK,GAAI;AACpF,aAAO,UAAU,SAAS,UAAU;AAAA,IACrC;AACD,WAAO,gBAAgB,OAAO,OAAO,SAAS,YAAY,aAAa,KAAK;AAAA,EAC7E;AAGD,MAAI,yBAAyB,GAC3B,2BAA2B;AAY7B,WAAS,YAAY,QAAQ,QAAQ,WAAW,YAAY;AAC1D,QAAI,QAAQ,UAAU,QACpB,SAAS,OACT,eAAe,CAAC;AAElB,QAAI,UAAU,MAAM;AAClB,aAAO,CAAC;AAAA,IACT;AACD,aAAS,OAAO,MAAM;AACtB,WAAO,SAAS;AACd,UAAI,OAAO,UAAU,KAAK;AAC1B,UAAI,gBAAgB,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,SAAS;AAChF,eAAO;AAAA,MACR;AAAA,IACF;AACD,WAAO,EAAE,QAAQ,QAAQ;AACvB,aAAO,UAAU,KAAK;AACtB,UAAI,MAAM,KAAK,CAAC,GACd,WAAW,OAAO,GAAG,GACrB,WAAW,KAAK,CAAC;AAEnB,UAAI,gBAAgB,KAAK,CAAC,GAAG;AAC3B,YAAI,aAAa,UAAa,EAAE,OAAO,SAAS;AAC9C,iBAAO;AAAA,QACR;AAAA,MACT,OAAa;AACL,YAAI,QAAQ,IAAI,MAAO;AACvB,YAAI,YAAY;AACd,cAAI,SAAS,WAAW,UAAU,UAAU,KAAK,QAAQ,QAAQ,KAAK;AAAA,QACvE;AACD,YACE,EAAE,WAAW,SACT,YAAY,UAAU,UAAU,yBAAyB,0BAA0B,YAAY,KAAK,IACpG,SACJ;AACA,iBAAO;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACD,WAAO;AAAA,EACR;AAUD,WAAS,mBAAmB,OAAO;AACjC,WAAO,UAAU,SAAS,CAAC,SAAS,KAAK;AAAA,EAC1C;AASD,WAAS,aAAa,QAAQ;AAC5B,QAAI,SAAS,KAAK,MAAM,GACtB,SAAS,OAAO;AAElB,WAAO,UAAU;AACf,UAAI,MAAM,OAAO,MAAM,GACrB,QAAQ,OAAO,GAAG;AAEpB,aAAO,MAAM,IAAI,CAAC,KAAK,OAAO,mBAAmB,KAAK,CAAC;AAAA,IACxD;AACD,WAAO;AAAA,EACR;AAWD,WAAS,wBAAwB,KAAK,UAAU;AAC9C,WAAO,SAAU,QAAQ;AACvB,UAAI,UAAU,MAAM;AAClB,eAAO;AAAA,MACR;AACD,aAAO,OAAO,GAAG,MAAM,aAAa,aAAa,UAAa,OAAO,OAAO,MAAM;AAAA,IACnF;AAAA,EACF;AASD,WAAS,YAAY,QAAQ;AAC3B,QAAI,YAAY,aAAa,MAAM;AACnC,QAAI,UAAU,UAAU,KAAK,UAAU,CAAC,EAAE,CAAC,GAAG;AAC5C,aAAO,wBAAwB,UAAU,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;AAAA,IAChE;AACD,WAAO,SAAU,QAAQ;AACvB,aAAO,WAAW,UAAU,YAAY,QAAQ,QAAQ,SAAS;AAAA,IAClE;AAAA,EACF;AAUD,WAAS,UAAU,QAAQ,KAAK;AAC9B,WAAO,UAAU,QAAQ,OAAO,OAAO,MAAM;AAAA,EAC9C;AAWD,WAAS,QAAQ,QAAQ,MAAM,SAAS;AACtC,WAAO,SAAS,MAAM,MAAM;AAE5B,QAAI,QAAQ,IACV,SAAS,KAAK,QACd,SAAS;AAEX,WAAO,EAAE,QAAQ,QAAQ;AACvB,UAAI,MAAM,MAAM,KAAK,KAAK,CAAC;AAC3B,UAAI,EAAE,SAAS,UAAU,QAAQ,QAAQ,QAAQ,GAAG,IAAI;AACtD;AAAA,MACD;AACD,eAAS,OAAO,GAAG;AAAA,IACpB;AACD,QAAI,UAAU,EAAE,SAAS,QAAQ;AAC/B,aAAO;AAAA,IACR;AACD,aAAS,UAAU,OAAO,IAAI,OAAO;AACrC,WAAO,CAAC,CAAC,UAAU,SAAS,MAAM,KAAK,QAAQ,KAAK,MAAM,MAAM,UAAU,MAAM,KAAK,cAAc,MAAM;AAAA,EAC1G;AA4BD,WAAS,MAAM,QAAQ,MAAM;AAC3B,WAAO,UAAU,QAAQ,QAAQ,QAAQ,MAAM,SAAS;AAAA,EACzD;AAGD,MAAI,uBAAuB,GACzB,yBAAyB;AAU3B,WAAS,oBAAoB,MAAM,UAAU;AAC3C,QAAI,MAAM,IAAI,KAAK,mBAAmB,QAAQ,GAAG;AAC/C,aAAO,wBAAwB,MAAM,IAAI,GAAG,QAAQ;AAAA,IACrD;AACD,WAAO,SAAU,QAAQ;AACvB,UAAI,WAAW,IAAI,QAAQ,IAAI;AAC/B,aAAO,aAAa,UAAa,aAAa,WAC1C,MAAM,QAAQ,IAAI,IAClB,YAAY,UAAU,UAAU,uBAAuB,sBAAsB;AAAA,IAClF;AAAA,EACF;AASD,WAAS,aAAa,KAAK;AACzB,WAAO,SAAU,QAAQ;AACvB,aAAO,UAAU,OAAO,SAAY,OAAO,GAAG;AAAA,IAC/C;AAAA,EACF;AASD,WAAS,iBAAiB,MAAM;AAC9B,WAAO,SAAU,QAAQ;AACvB,aAAO,QAAQ,QAAQ,IAAI;AAAA,IAC5B;AAAA,EACF;AAwBD,WAAS,SAAS,MAAM;AACtB,WAAO,MAAM,IAAI,IAAI,aAAa,MAAM,IAAI,CAAC,IAAI,iBAAiB,IAAI;AAAA,EACvE;AASD,WAAS,aAAa,OAAO;AAG3B,QAAI,OAAO,SAAS,YAAY;AAC9B,aAAO;AAAA,IACR;AACD,QAAI,SAAS,MAAM;AACjB,aAAO;AAAA,IACR;AACD,QAAI,OAAO,SAAS,UAAU;AAC5B,aAAO,UAAU,KAAK,IAAI,oBAAoB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,YAAY,KAAK;AAAA,IACtF;AACD,WAAO,SAAS,KAAK;AAAA,EACtB;AAYD,WAAS,gBAAgB,OAAO,QAAQ,UAAU,aAAa;AAC7D,QAAI,QAAQ,IACV,SAAS,SAAS,OAAO,IAAI,MAAM;AAErC,WAAO,EAAE,QAAQ,QAAQ;AACvB,UAAI,QAAQ,MAAM,KAAK;AACvB,aAAO,aAAa,OAAO,SAAS,KAAK,GAAG,KAAK;AAAA,IAClD;AACD,WAAO;AAAA,EACR;AASD,WAAS,cAAc,WAAW;AAChC,WAAO,SAAU,QAAQ,UAAU,UAAU;AAC3C,UAAI,QAAQ,IACV,WAAW,OAAO,MAAM,GACxB,QAAQ,SAAS,MAAM,GACvB,SAAS,MAAM;AAEjB,aAAO,UAAU;AACf,YAAI,MAAM,MAAM,YAAY,SAAS,EAAE,KAAK;AAC5C,YAAI,SAAS,SAAS,GAAG,GAAG,KAAK,QAAQ,MAAM,OAAO;AACpD;AAAA,QACD;AAAA,MACF;AACD,aAAO;AAAA,IACR;AAAA,EACF;AAaD,MAAI,UAAU,cAAe;AAE7B,QAAM,YAAY;AAUlB,WAAS,WAAW,QAAQ,UAAU;AACpC,WAAO,UAAU,UAAU,QAAQ,UAAU,IAAI;AAAA,EAClD;AAUD,WAAS,eAAe,UAAU,WAAW;AAC3C,WAAO,SAAU,YAAY,UAAU;AACrC,UAAI,cAAc,MAAM;AACtB,eAAO;AAAA,MACR;AACD,UAAI,CAAC,YAAY,UAAU,GAAG;AAC5B,eAAO,SAAS,YAAY,QAAQ;AAAA,MACrC;AACD,UAAI,SAAS,WAAW,QACtB,QAAQ,YAAY,SAAS,IAC7B,WAAW,OAAO,UAAU;AAE9B,aAAO,YAAY,UAAU,EAAE,QAAQ,QAAQ;AAC7C,YAAI,SAAS,SAAS,KAAK,GAAG,OAAO,QAAQ,MAAM,OAAO;AACxD;AAAA,QACD;AAAA,MACF;AACD,aAAO;AAAA,IACR;AAAA,EACF;AAUD,MAAI,WAAW,eAAe,UAAU;AAExC,QAAM,aAAa;AAanB,WAAS,eAAe,YAAY,QAAQ,UAAU,aAAa;AACjE,eAAW,YAAY,SAAU,OAAO,KAAKI,aAAY;AACvD,aAAO,aAAa,OAAO,SAAS,KAAK,GAAGA,WAAU;AAAA,IAC5D,CAAK;AACD,WAAO;AAAA,EACR;AAUD,WAAS,iBAAiB,QAAQ,aAAa;AAC7C,WAAO,SAAU,YAAY,UAAU;AACrC,UAAI,OAAO,UAAU,UAAU,IAAI,kBAAkB,gBACnD,cAAc,cAAc,YAAW,IAAK,CAAE;AAEhD,aAAO,KAAK,YAAY,QAAQ,aAAa,QAAQ,GAAG,WAAW;AAAA,IACpE;AAAA,EACF;AAGD,MAAI,gBAAgB,OAAO;AAG3B,MAAI,mBAAmB,cAAc;AAuBrC,MAAI,WAAW,SAAS,SAAU,QAAQ,SAAS;AACjD,aAAS,OAAO,MAAM;AAEtB,QAAI,QAAQ;AACZ,QAAI,SAAS,QAAQ;AACrB,QAAI,QAAQ,SAAS,IAAI,QAAQ,CAAC,IAAI;AAEtC,QAAI,SAAS,eAAe,QAAQ,CAAC,GAAG,QAAQ,CAAC,GAAG,KAAK,GAAG;AAC1D,eAAS;AAAA,IACV;AAED,WAAO,EAAE,QAAQ,QAAQ;AACvB,UAAI,SAAS,QAAQ,KAAK;AAC1B,UAAI,QAAQ,OAAO,MAAM;AACzB,UAAI,aAAa;AACjB,UAAI,cAAc,MAAM;AAExB,aAAO,EAAE,aAAa,aAAa;AACjC,YAAI,MAAM,MAAM,UAAU;AAC1B,YAAI,QAAQ,OAAO,GAAG;AAEtB,YAAI,UAAU,UAAc,GAAG,OAAO,cAAc,GAAG,CAAC,KAAK,CAAC,iBAAiB,KAAK,QAAQ,GAAG,GAAI;AACjG,iBAAO,GAAG,IAAI,OAAO,GAAG;AAAA,QACzB;AAAA,MACF;AAAA,IACF;AAED,WAAO;AAAA,EACX,CAAG;AAED,QAAM,aAAa;AA2BnB,WAAS,kBAAkB,OAAO;AAChC,WAAO,aAAa,KAAK,KAAK,YAAY,KAAK;AAAA,EAChD;AAWD,WAAS,kBAAkB,OAAO,OAAO,YAAY;AACnD,QAAI,QAAQ,IACV,SAAS,SAAS,OAAO,IAAI,MAAM;AAErC,WAAO,EAAE,QAAQ,QAAQ;AACvB,UAAI,WAAW,OAAO,MAAM,KAAK,CAAC,GAAG;AACnC,eAAO;AAAA,MACR;AAAA,IACF;AACD,WAAO;AAAA,EACR;AAGD,MAAI,qBAAqB;AAazB,WAAS,eAAe,OAAOH,SAAQ,UAAU,YAAY;AAC3D,QAAI,QAAQ,IACVI,YAAW,eACX,WAAW,MACX,SAAS,MAAM,QACf,SAAS,CAAE,GACX,eAAeJ,QAAO;AAExB,QAAI,CAAC,QAAQ;AACX,aAAO;AAAA,IACR;AACD,QAAI,UAAU;AACZ,MAAAA,UAAS,SAASA,SAAQ,UAAU,QAAQ,CAAC;AAAA,IAC9C;AACD,QAAI,YAAY;AACd,MAAAI,YAAW;AACX,iBAAW;AAAA,IACjB,WAAeJ,QAAO,UAAU,oBAAoB;AAC9C,MAAAI,YAAW;AACX,iBAAW;AACX,MAAAJ,UAAS,IAAI,SAASA,OAAM;AAAA,IAC7B;AACD;AAAO,aAAO,EAAE,QAAQ,QAAQ;AAC9B,YAAI,QAAQ,MAAM,KAAK,GACrB,WAAW,YAAY,OAAO,QAAQ,SAAS,KAAK;AAEtD,gBAAQ,cAAc,UAAU,IAAI,QAAQ;AAC5C,YAAI,YAAY,aAAa,UAAU;AACrC,cAAI,cAAc;AAClB,iBAAO,eAAe;AACpB,gBAAIA,QAAO,WAAW,MAAM,UAAU;AACpC,uBAAS;AAAA,YACV;AAAA,UACF;AACD,iBAAO,KAAK,KAAK;AAAA,QAClB,WAAU,CAACI,UAASJ,SAAQ,UAAU,UAAU,GAAG;AAClD,iBAAO,KAAK,KAAK;AAAA,QAClB;AAAA,MACF;AACD,WAAO;AAAA,EACR;AAuBD,MAAI,aAAa,SAAS,SAAU,OAAOA,SAAQ;AACjD,WAAO,kBAAkB,KAAK,IAAI,eAAe,OAAO,YAAYA,SAAQ,GAAG,mBAAmB,IAAI,CAAC,IAAI,CAAE;AAAA,EACjH,CAAG;AAED,QAAM,eAAe;AAgBrB,WAAS,KAAK,OAAO;AACnB,QAAI,SAAS,SAAS,OAAO,IAAI,MAAM;AACvC,WAAO,SAAS,MAAM,SAAS,CAAC,IAAI;AAAA,EACrC;AA2BD,WAAS,KAAK,OAAO,GAAG,OAAO;AAC7B,QAAI,SAAS,SAAS,OAAO,IAAI,MAAM;AACvC,QAAI,CAAC,QAAQ;AACX,aAAO,CAAE;AAAA,IACV;AACD,QAAI,SAAS,MAAM,SAAY,IAAI,UAAU,CAAC;AAC9C,WAAO,UAAU,OAAO,IAAI,IAAI,IAAI,GAAG,MAAM;AAAA,EAC9C;AA2BD,WAAS,UAAU,OAAO,GAAG,OAAO;AAClC,QAAI,SAAS,SAAS,OAAO,IAAI,MAAM;AACvC,QAAI,CAAC,QAAQ;AACX,aAAO,CAAE;AAAA,IACV;AACD,QAAI,SAAS,MAAM,SAAY,IAAI,UAAU,CAAC;AAC9C,QAAI,SAAS;AACb,WAAO,UAAU,OAAO,GAAG,IAAI,IAAI,IAAI,CAAC;AAAA,EACzC;AASD,WAAS,aAAa,OAAO;AAC3B,WAAO,OAAO,SAAS,aAAa,QAAQ;AAAA,EAC7C;AAgCD,WAAS,QAAQ,YAAY,UAAU;AACrC,QAAI,OAAO,UAAU,UAAU,IAAI,YAAY;AAC/C,WAAO,KAAK,YAAY,aAAa,QAAQ,CAAC;AAAA,EAC/C;AAYD,WAAS,WAAW,OAAO,WAAW;AACpC,QAAI,QAAQ,IACV,SAAS,SAAS,OAAO,IAAI,MAAM;AAErC,WAAO,EAAE,QAAQ,QAAQ;AACvB,UAAI,CAAC,UAAU,MAAM,KAAK,GAAG,OAAO,KAAK,GAAG;AAC1C,eAAO;AAAA,MACR;AAAA,IACF;AACD,WAAO;AAAA,EACR;AAWD,WAAS,UAAU,YAAY,WAAW;AACxC,QAAI,SAAS;AACb,eAAW,YAAY,SAAU,OAAO,OAAOG,aAAY;AACzD,eAAS,CAAC,CAAC,UAAU,OAAO,OAAOA,WAAU;AAC7C,aAAO;AAAA,IACb,CAAK;AACD,WAAO;AAAA,EACR;AA2CD,WAAS,MAAM,YAAY,WAAW,OAAO;AAC3C,QAAI,OAAO,UAAU,UAAU,IAAI,aAAa;AAChD,QAAI,SAAS,eAAe,YAAY,WAAW,KAAK,GAAG;AACzD,kBAAY;AAAA,IACb;AACD,WAAO,KAAK,YAAY,aAAa,SAAS,CAAC;AAAA,EAChD;AAUD,WAAS,WAAW,YAAY,WAAW;AACzC,QAAI,SAAS,CAAE;AACf,eAAW,YAAY,SAAU,OAAO,OAAOA,aAAY;AACzD,UAAI,UAAU,OAAO,OAAOA,WAAU,GAAG;AACvC,eAAO,KAAK,KAAK;AAAA,MAClB;AAAA,IACP,CAAK;AACD,WAAO;AAAA,EACR;AA2CD,WAAS,OAAO,YAAY,WAAW;AACrC,QAAI,OAAO,UAAU,UAAU,IAAI,cAAc;AACjD,WAAO,KAAK,YAAY,aAAa,SAAS,CAAC;AAAA,EAChD;AASD,WAAS,WAAW,eAAe;AACjC,WAAO,SAAU,YAAY,WAAW,WAAW;AACjD,UAAI,WAAW,OAAO,UAAU;AAChC,UAAI,CAAC,YAAY,UAAU,GAAG;AAC5B,YAAI,WAAW,aAAa,SAAS;AACrC,qBAAa,KAAK,UAAU;AAC5B,oBAAY,SAAU,KAAK;AACzB,iBAAO,SAAS,SAAS,GAAG,GAAG,KAAK,QAAQ;AAAA,QAC7C;AAAA,MACF;AACD,UAAI,QAAQ,cAAc,YAAY,WAAW,SAAS;AAC1D,aAAO,QAAQ,KAAK,SAAS,WAAW,WAAW,KAAK,IAAI,KAAK,IAAI;AAAA,IACtE;AAAA,EACF;AAGD,MAAI,cAAc,KAAK;AAqCvB,WAAS,UAAU,OAAO,WAAW,WAAW;AAC9C,QAAI,SAAS,SAAS,OAAO,IAAI,MAAM;AACvC,QAAI,CAAC,QAAQ;AACX,aAAO;AAAA,IACR;AACD,QAAI,QAAQ,aAAa,OAAO,IAAI,UAAU,SAAS;AACvD,QAAI,QAAQ,GAAG;AACb,cAAQ,YAAY,SAAS,OAAO,CAAC;AAAA,IACtC;AACD,WAAO,cAAc,OAAO,aAAa,SAAS,GAAG,KAAK;AAAA,EAC3D;AAsCD,MAAI,OAAO,WAAW,SAAS;AAE/B,QAAM,SAAS;AAoBf,WAAS,KAAK,OAAO;AACnB,WAAO,SAAS,MAAM,SAAS,MAAM,CAAC,IAAI;AAAA,EAC3C;AAUD,WAAS,QAAQ,YAAY,UAAU;AACrC,QAAI,QAAQ,IACV,SAAS,YAAY,UAAU,IAAI,MAAM,WAAW,MAAM,IAAI,CAAE;AAElE,eAAW,YAAY,SAAU,OAAO,KAAKA,aAAY;AACvD,aAAO,EAAE,KAAK,IAAI,SAAS,OAAO,KAAKA,WAAU;AAAA,IACvD,CAAK;AACD,WAAO;AAAA,EACR;AA4CD,WAAS,IAAI,YAAY,UAAU;AACjC,QAAI,OAAO,UAAU,UAAU,IAAI,WAAW;AAC9C,WAAO,KAAK,YAAY,aAAa,QAAQ,CAAC;AAAA,EAC/C;AAuBD,WAAS,QAAQ,YAAY,UAAU;AACrC,WAAO,YAAY,IAAI,YAAY,QAAQ,GAAG,CAAC;AAAA,EAChD;AAGD,MAAI,gBAAgB,OAAO;AAG3B,MAAI,mBAAmB,cAAc;AAyBrC,MAAI,UAAU,iBAAiB,SAAU,QAAQ,OAAO,KAAK;AAC3D,QAAI,iBAAiB,KAAK,QAAQ,GAAG,GAAG;AACtC,aAAO,GAAG,EAAE,KAAK,KAAK;AAAA,IAC5B,OAAW;AACL,sBAAgB,QAAQ,KAAK,CAAC,KAAK,CAAC;AAAA,IACrC;AAAA,EACL,CAAG;AAED,QAAM,YAAY;AAGlB,MAAI,gBAAgB,OAAO;AAG3B,MAAI,mBAAmB,cAAc;AAUrC,WAAS,QAAQ,QAAQ,KAAK;AAC5B,WAAO,UAAU,QAAQ,iBAAiB,KAAK,QAAQ,GAAG;AAAA,EAC3D;AA6BD,WAAS,IAAI,QAAQ,MAAM;AACzB,WAAO,UAAU,QAAQ,QAAQ,QAAQ,MAAM,OAAO;AAAA,EACvD;AAGD,MAAI,YAAY;AAmBhB,WAAS,SAAS,OAAO;AACvB,WAAO,OAAO,SAAS,YAAa,CAAC,UAAU,KAAK,KAAK,aAAa,KAAK,KAAK,WAAW,KAAK,KAAK;AAAA,EACtG;AAYD,WAAS,WAAW,QAAQ,OAAO;AACjC,WAAO,SAAS,OAAO,SAAU,KAAK;AACpC,aAAO,OAAO,GAAG;AAAA,IACvB,CAAK;AAAA,EACF;AA4BD,WAAS,OAAO,QAAQ;AACtB,WAAO,UAAU,OAAO,CAAE,IAAG,WAAW,QAAQ,KAAK,MAAM,CAAC;AAAA,EAC7D;AAGD,MAAI,cAAc,KAAK;AAgCvB,WAAS,SAAS,YAAY,OAAO,WAAW,OAAO;AACrD,iBAAa,YAAY,UAAU,IAAI,aAAa,OAAO,UAAU;AACrE,gBAAY,aAAa,CAAC,QAAQ,UAAU,SAAS,IAAI;AAEzD,QAAI,SAAS,WAAW;AACxB,QAAI,YAAY,GAAG;AACjB,kBAAY,YAAY,SAAS,WAAW,CAAC;AAAA,IAC9C;AACD,WAAO,SAAS,UAAU,IACtB,aAAa,UAAU,WAAW,QAAQ,OAAO,SAAS,IAAI,KAC9D,CAAC,CAAC,UAAU,YAAY,YAAY,OAAO,SAAS,IAAI;AAAA,EAC7D;AAGD,MAAI,YAAY,KAAK;AAyBrB,WAAS,QAAQ,OAAO,OAAO,WAAW;AACxC,QAAI,SAAS,SAAS,OAAO,IAAI,MAAM;AACvC,QAAI,CAAC,QAAQ;AACX,aAAO;AAAA,IACR;AACD,QAAI,QAAQ,aAAa,OAAO,IAAI,UAAU,SAAS;AACvD,QAAI,QAAQ,GAAG;AACb,cAAQ,UAAU,SAAS,OAAO,CAAC;AAAA,IACpC;AACD,WAAO,YAAY,OAAO,OAAO,KAAK;AAAA,EACvC;AAGD,MAAI,SAAS,gBACX,SAAS;AAGX,MAAI,cAAc,OAAO;AAGzB,MAAI,iBAAiB,YAAY;AAmCjC,WAAS,QAAQ,OAAO;AACtB,QAAI,SAAS,MAAM;AACjB,aAAO;AAAA,IACR;AACD,QACE,YAAY,KAAK,MAChB,UAAU,KAAK,KACd,OAAO,SAAS,YAChB,OAAO,MAAM,UAAU,cACvB,WAAW,KAAK,KAChB,eAAe,KAAK,KACpB,cAAc,KAAK,IACrB;AACA,aAAO,CAAC,MAAM;AAAA,IACf;AACD,QAAI,MAAM,SAAS,KAAK;AACxB,QAAI,OAAO,UAAU,OAAO,QAAQ;AAClC,aAAO,CAAC,MAAM;AAAA,IACf;AACD,QAAI,YAAY,KAAK,GAAG;AACtB,aAAO,CAAC,SAAS,KAAK,EAAE;AAAA,IACzB;AACD,aAAS,OAAO,OAAO;AACrB,UAAI,eAAe,KAAK,OAAO,GAAG,GAAG;AACnC,eAAO;AAAA,MACR;AAAA,IACF;AACD,WAAO;AAAA,EACR;AAGD,MAAI,YAAY;AAShB,WAAS,aAAa,OAAO;AAC3B,WAAO,aAAa,KAAK,KAAK,WAAW,KAAK,KAAK;AAAA,EACpD;AAGD,MAAI,eAAe,cAAc,WAAW;AAmB5C,MAAI,WAAW,eAAe,UAAU,YAAY,IAAI;AAExD,QAAM,aAAa;AAmBnB,WAAS,YAAY,OAAO;AAC1B,WAAO,UAAU;AAAA,EAClB;AAGD,MAAI,kBAAkB;AAsBtB,WAAS,OAAO,WAAW;AACzB,QAAI,OAAO,aAAa,YAAY;AAClC,YAAM,IAAI,UAAU,eAAe;AAAA,IACpC;AACD,WAAO,WAAY;AACjB,UAAI,OAAO;AACX,cAAQ,KAAK,QAAM;AAAA,QACjB,KAAK;AACH,iBAAO,CAAC,UAAU,KAAK,IAAI;AAAA,QAC7B,KAAK;AACH,iBAAO,CAAC,UAAU,KAAK,MAAM,KAAK,CAAC,CAAC;AAAA,QACtC,KAAK;AACH,iBAAO,CAAC,UAAU,KAAK,MAAM,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC;AAAA,QAC/C,KAAK;AACH,iBAAO,CAAC,UAAU,KAAK,MAAM,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC;AAAA,MACzD;AACD,aAAO,CAAC,UAAU,MAAM,MAAM,IAAI;AAAA,IACnC;AAAA,EACF;AAYD,WAAS,QAAQ,QAAQ,MAAM,OAAO,YAAY;AAChD,QAAI,CAAC,SAAS,MAAM,GAAG;AACrB,aAAO;AAAA,IACR;AACD,WAAO,SAAS,MAAM,MAAM;AAE5B,QAAI,QAAQ,IACV,SAAS,KAAK,QACd,YAAY,SAAS,GACrB,SAAS;AAEX,WAAO,UAAU,QAAQ,EAAE,QAAQ,QAAQ;AACzC,UAAI,MAAM,MAAM,KAAK,KAAK,CAAC,GACzB,WAAW;AAEb,UAAI,QAAQ,eAAe,QAAQ,iBAAiB,QAAQ,aAAa;AACvE,eAAO;AAAA,MACR;AAED,UAAI,SAAS,WAAW;AACtB,YAAI,WAAW,OAAO,GAAG;AACzB,mBAAW,aAAa,WAAW,UAAU,KAAK,MAAM,IAAI;AAC5D,YAAI,aAAa,QAAW;AAC1B,qBAAW,SAAS,QAAQ,IAAI,WAAW,QAAQ,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAE,IAAG,CAAE;AAAA,QAC9E;AAAA,MACF;AACD,kBAAY,QAAQ,KAAK,QAAQ;AACjC,eAAS,OAAO,GAAG;AAAA,IACpB;AACD,WAAO;AAAA,EACR;AAWD,WAAS,WAAW,QAAQ,OAAO,WAAW;AAC5C,QAAI,QAAQ,IACV,SAAS,MAAM,QACf,SAAS,CAAE;AAEb,WAAO,EAAE,QAAQ,QAAQ;AACvB,UAAI,OAAO,MAAM,KAAK,GACpB,QAAQ,QAAQ,QAAQ,IAAI;AAE9B,UAAI,UAAU,OAAO,IAAI,GAAG;AAC1B,gBAAQ,QAAQ,SAAS,MAAM,MAAM,GAAG,KAAK;AAAA,MAC9C;AAAA,IACF;AACD,WAAO;AAAA,EACR;AAoBD,WAAS,OAAO,QAAQ,WAAW;AACjC,QAAI,UAAU,MAAM;AAClB,aAAO,CAAE;AAAA,IACV;AACD,QAAI,QAAQ,SAAS,aAAa,MAAM,GAAG,SAAU,MAAM;AACzD,aAAO,CAAC,IAAI;AAAA,IAClB,CAAK;AACD,gBAAY,aAAa,SAAS;AAClC,WAAO,WAAW,QAAQ,OAAO,SAAU,OAAO,MAAM;AACtD,aAAO,UAAU,OAAO,KAAK,CAAC,CAAC;AAAA,IACrC,CAAK;AAAA,EACF;AAeD,WAAS,WAAW,YAAY,UAAU,aAAa,WAAW,UAAU;AAC1E,aAAS,YAAY,SAAU,OAAO,OAAOA,aAAY;AACvD,oBAAc,aAAc,YAAY,OAAQ,SAAS,SAAS,aAAa,OAAO,OAAOA,WAAU;AAAA,IAC7G,CAAK;AACD,WAAO;AAAA,EACR;AAuCD,WAAS,OAAO,YAAY,UAAU,aAAa;AACjD,QAAI,OAAO,UAAU,UAAU,IAAI,cAAc,YAC/C,YAAY,UAAU,SAAS;AAEjC,WAAO,KAAK,YAAY,aAAa,QAAQ,GAAG,aAAa,WAAW,UAAU;AAAA,EACnF;AAoCD,WAAS,OAAO,YAAY,WAAW;AACrC,QAAI,OAAO,UAAU,UAAU,IAAI,cAAc;AACjD,WAAO,KAAK,YAAY,OAAO,aAAa,SAAS,CAAC,CAAC;AAAA,EACxD;AAWD,WAAS,SAAS,YAAY,WAAW;AACvC,QAAI;AAEJ,eAAW,YAAY,SAAU,OAAO,OAAOA,aAAY;AACzD,eAAS,UAAU,OAAO,OAAOA,WAAU;AAC3C,aAAO,CAAC;AAAA,IACd,CAAK;AACD,WAAO,CAAC,CAAC;AAAA,EACV;AAsCD,WAAS,KAAK,YAAY,WAAW,OAAO;AAC1C,QAAI,OAAO,UAAU,UAAU,IAAI,YAAY;AAC/C,QAAI,SAAS,eAAe,YAAY,WAAW,KAAK,GAAG;AACzD,kBAAY;AAAA,IACb;AACD,WAAO,KAAK,YAAY,aAAa,SAAS,CAAC;AAAA,EAChD;AAGD,MAAI,WAAW,IAAI;AASnB,MAAI,YAAY,EAAE,SAAS,IAAI,WAAW,IAAI,MAAM,CAAG,EAAA,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,YAC/D,OACA,SAAUH,SAAQ;AAChB,WAAO,IAAI,MAAMA,OAAM;AAAA,EACxB;AAEL,QAAM,cAAc;AAGpB,MAAI,mBAAmB;AAWvB,WAAS,SAAS,OAAO,UAAU,YAAY;AAC7C,QAAI,QAAQ,IACVI,YAAW,eACX,SAAS,MAAM,QACf,WAAW,MACX,SAAS,CAAE,GACX,OAAO;AAET,QAAI,YAAY;AACd,iBAAW;AACX,MAAAA,YAAW;AAAA,IACjB,WAAe,UAAU,kBAAkB;AACrC,UAAI,MAAM,WAAW,OAAO,YAAY,KAAK;AAC7C,UAAI,KAAK;AACP,eAAO,WAAW,GAAG;AAAA,MACtB;AACD,iBAAW;AACX,MAAAA,YAAW;AACX,aAAO,IAAI,SAAU;AAAA,IAC3B,OAAW;AACL,aAAO,WAAW,CAAA,IAAK;AAAA,IACxB;AACD;AAAO,aAAO,EAAE,QAAQ,QAAQ;AAC9B,YAAI,QAAQ,MAAM,KAAK,GACrB,WAAW,WAAW,SAAS,KAAK,IAAI;AAE1C,gBAAQ,cAAc,UAAU,IAAI,QAAQ;AAC5C,YAAI,YAAY,aAAa,UAAU;AACrC,cAAI,YAAY,KAAK;AACrB,iBAAO,aAAa;AAClB,gBAAI,KAAK,SAAS,MAAM,UAAU;AAChC,uBAAS;AAAA,YACV;AAAA,UACF;AACD,cAAI,UAAU;AACZ,iBAAK,KAAK,QAAQ;AAAA,UACnB;AACD,iBAAO,KAAK,KAAK;AAAA,QAClB,WAAU,CAACA,UAAS,MAAM,UAAU,UAAU,GAAG;AAChD,cAAI,SAAS,QAAQ;AACnB,iBAAK,KAAK,QAAQ;AAAA,UACnB;AACD,iBAAO,KAAK,KAAK;AAAA,QAClB;AAAA,MACF;AACD,WAAO;AAAA,EACR;AAoBD,WAAS,KAAK,OAAO;AACnB,WAAO,SAAS,MAAM,SAAS,SAAS,KAAK,IAAI,CAAE;AAAA,EACpD;AAED,WAAS,YAAY,KAAK;AAExB,QAAI,WAAW,QAAQ,OAAO;AAC5B,cAAQ,MAAM,UAAU,KAAK;AAAA,IAC9B;AAAA,EACF;AACD,WAAS,cAAc,KAAK;AAE1B,QAAI,WAAW,QAAQ,MAAM;AAE3B,cAAQ,KAAK,YAAY,KAAK;AAAA,IAC/B;AAAA,EACF;AAED,WAAS,MAAM,MAAM;AACnB,UAAM,SAAQ,oBAAI,KAAM,GAAC,QAAS;AAClC,UAAM,MAAM,KAAM;AAClB,UAAM,OAAM,oBAAI,KAAM,GAAC,QAAS;AAChC,UAAM,QAAQ,MAAM;AACpB,WAAO,EAAE,MAAM,OAAO,OAAO,IAAK;AAAA,EACnC;AAGD,WAAS,iBAAiB,cAAc;AACtC,aAAS,kBAAkB;AAAA,IAAE;AAE7B,oBAAgB,YAAY;AAC5B,UAAM,eAAe,IAAI,gBAAiB;AAC1C,aAAS,aAAa;AACpB,aAAO,OAAO,aAAa;AAAA,IAC5B;AAGD,eAAY;AACZ,eAAY;AAGZ,WAAO;AAAA,EACR;AAGD,WAAS,aAAa,SAAS;AAC7B,QAAI,gBAAgB,OAAO,GAAG;AAC5B,aAAO,QAAQ;AAAA,IACrB,OAAW;AACL,aAAO,QAAQ;AAAA,IAChB;AAAA,EACF;AAED,WAAS,gBAAgB,KAAK;AAC5B,WAAO,SAAS,IAAI,KAAK,KAAK,IAAI,UAAU;AAAA,EAC7C;AACD,QAAM,mBAAmB;AAAA,IACvB,IAAI,aAAa;AACf,aAAO,KAAK;AAAA,IACb;AAAA,IACD,IAAI,WAAW,OAAO;AACpB,WAAK,cAAc;AAAA,IACpB;AAAA,IACD,YAAY,aAAa;AACvB,WAAK,cAAc;AAAA,IACpB;AAAA,IACD,OAAO,SAAS;AACd,cAAQ,MAAM,IAAI;AAClB,cAAQ,KAAK,YAAY,CAAC,SAAS;AACjC,aAAK,OAAO,OAAO;AAAA,MAC3B,CAAO;AAAA,IACF;AAAA,EACF;AACD,QAAM,oBAAoB,mBAAmB;AAAA,IAC3C,YAAY,SAAS;AACnB,YAAM,CAAA,CAAE;AACR,WAAK,MAAM;AACX;AAAA,QACE;AAAA,QACA,OAAO,SAAS,CAAC,MAAM,MAAM,MAAS;AAAA,MACvC;AAAA,IACF;AAAA,IACD,IAAI,WAAW,YAAY;AAAA,IAE1B;AAAA,IACD,IAAI,aAAa;AACf,UAAI,KAAK,mBAAmB,QAAW;AACrC,eAAO,KAAK,eAAe;AAAA,MAC5B;AACD,aAAO,CAAE;AAAA,IACV;AAAA,IACD,OAAO,SAAS;AACd,cAAQ,MAAM,IAAI;AAAA,IAEnB;AAAA,EACF;AACD,QAAM,aAAa,mBAAmB;AAAA,IACpC,YAAY,SAAS;AACnB,YAAM,QAAQ,UAAU;AACxB,WAAK,UAAU;AACf;AAAA,QACE;AAAA,QACA,OAAO,SAAS,CAAC,MAAM,MAAM,MAAS;AAAA,MACvC;AAAA,IACF;AAAA,EACF;AACD,QAAM,oBAAoB,mBAAmB;AAAA,IAC3C,YAAY,SAAS;AACnB,YAAM,QAAQ,UAAU;AACxB,WAAK,oBAAoB;AACzB;AAAA,QACE;AAAA,QACA,OAAO,SAAS,CAAC,MAAM,MAAM,MAAS;AAAA,MACvC;AAAA,IACF;AAAA,EACF;AACD,QAAM,eAAe,mBAAmB;AAAA,IACtC,YAAY,SAAS;AACnB,YAAM,QAAQ,UAAU;AACxB,WAAK,MAAM;AACX;AAAA,QACE;AAAA,QACA,OAAO,SAAS,CAAC,MAAM,MAAM,MAAS;AAAA,MACvC;AAAA,IACF;AAAA,EACF;AACD,QAAM,4BAA4B,mBAAmB;AAAA,IACnD,YAAY,SAAS;AACnB,YAAM,QAAQ,UAAU;AACxB,WAAK,MAAM;AACX;AAAA,QACE;AAAA,QACA,OAAO,SAAS,CAAC,MAAM,MAAM,MAAS;AAAA,MACvC;AAAA,IACF;AAAA,EACF;AACD,QAAM,yCAAyC,mBAAmB;AAAA,IAChE,YAAY,SAAS;AACnB,YAAM,QAAQ,UAAU;AACxB,WAAK,MAAM;AACX;AAAA,QACE;AAAA,QACA,OAAO,SAAS,CAAC,MAAM,MAAM,MAAS;AAAA,MACvC;AAAA,IACF;AAAA,EACF;AACD,QAAM,mBAAmB,mBAAmB;AAAA,IAC1C,YAAY,SAAS;AACnB,YAAM,QAAQ,UAAU;AACxB,WAAK,MAAM;AACX;AAAA,QACE;AAAA,QACA,OAAO,SAAS,CAAC,MAAM,MAAM,MAAS;AAAA,MACvC;AAAA,IACF;AAAA,EACF;AACD,QAAM,gCAAgC,mBAAmB;AAAA,IACvD,YAAY,SAAS;AACnB,YAAM,QAAQ,UAAU;AACxB,WAAK,MAAM;AACX;AAAA,QACE;AAAA,QACA,OAAO,SAAS,CAAC,MAAM,MAAM,MAAS;AAAA,MACvC;AAAA,IACF;AAAA,EACF;AACD,QAAM,oBAAoB,mBAAmB;AAAA,IAC3C,IAAI,aAAa;AACf,aAAO,KAAK;AAAA,IACb;AAAA,IACD,IAAI,WAAW,OAAO;AACpB,WAAK,cAAc;AAAA,IACpB;AAAA,IACD,YAAY,SAAS;AACnB,YAAM,QAAQ,UAAU;AACxB,WAAK,MAAM;AACX,WAAK,oBAAoB;AACzB,WAAK,gBAAgB;AACrB;AAAA,QACE;AAAA,QACA,OAAO,SAAS,CAAC,MAAM,MAAM,MAAS;AAAA,MACvC;AAAA,IACF;AAAA,EACF;AACD,QAAM,SAAS;AAAA,IACb,YAAY,SAAS;AACnB,WAAK,MAAM;AACX;AAAA,QACE;AAAA,QACA,OAAO,SAAS,CAAC,MAAM,MAAM,MAAS;AAAA,MACvC;AAAA,IACF;AAAA,IACD,OAAO,SAAS;AACd,cAAQ,MAAM,IAAI;AAAA,IACnB;AAAA,EACF;AACD,WAAS,iBAAiB,UAAU;AAClC,WAAO,IAAI,UAAU,mBAAmB;AAAA,EACzC;AACD,WAAS,oBAAoB,MAAM;AACjC,aAAS,kBAAkB,YAAY;AACrC,aAAO,IAAI,YAAY,mBAAmB;AAAA,IAC3C;AAED,QAAI,gBAAgB,aAAa;AAC/B,YAAM,wBAAwB;AAAA,QAC5B,MAAM;AAAA,QACN,MAAM,KAAK;AAAA,QACX,KAAK,KAAK;AAAA,MACX;AACD,UAAI,SAAS,KAAK,KAAK,GAAG;AACxB,8BAAsB,QAAQ,KAAK;AAAA,MACpC;AACD,aAAO;AAAA,IACb,WAAe,gBAAgB,aAAa;AACtC,aAAO;AAAA,QACL,MAAM;AAAA,QACN,YAAY,kBAAkB,KAAK,UAAU;AAAA,MAC9C;AAAA,IACP,WAAe,gBAAgB,QAAQ;AACjC,aAAO;AAAA,QACL,MAAM;AAAA,QACN,KAAK,KAAK;AAAA,QACV,YAAY,kBAAkB,KAAK,UAAU;AAAA,MAC9C;AAAA,IACP,WAAe,gBAAgB,qBAAqB;AAC9C,aAAO;AAAA,QACL,MAAM;AAAA,QACN,KAAK,KAAK;AAAA,QACV,YAAY,kBAAkB,KAAK,UAAU;AAAA,MAC9C;AAAA,IACP,WAAe,gBAAgB,kCAAkC;AAC3D,aAAO;AAAA,QACL,MAAM;AAAA,QACN,KAAK,KAAK;AAAA,QACV,WAAW,oBAAoB,IAAI,SAAS,EAAE,cAAc,KAAK,UAAS,CAAE,CAAC;AAAA,QAC7E,YAAY,kBAAkB,KAAK,UAAU;AAAA,MAC9C;AAAA,IACP,WAAe,gBAAgB,yBAAyB;AAClD,aAAO;AAAA,QACL,MAAM;AAAA,QACN,KAAK,KAAK;AAAA,QACV,WAAW,oBAAoB,IAAI,SAAS,EAAE,cAAc,KAAK,UAAS,CAAE,CAAC;AAAA,QAC7E,YAAY,kBAAkB,KAAK,UAAU;AAAA,MAC9C;AAAA,IACP,WAAe,gBAAgB,YAAY;AACrC,aAAO;AAAA,QACL,MAAM;AAAA,QACN,KAAK,KAAK;AAAA,QACV,YAAY,kBAAkB,KAAK,UAAU;AAAA,MAC9C;AAAA,IACP,WAAe,gBAAgB,aAAa;AACtC,aAAO;AAAA,QACL,MAAM;AAAA,QACN,KAAK,KAAK;AAAA,QACV,YAAY,kBAAkB,KAAK,UAAU;AAAA,MAC9C;AAAA,IACP,WAAe,gBAAgB,UAAU;AACnC,YAAM,qBAAqB;AAAA,QACzB,MAAM;AAAA,QACN,MAAM,KAAK,aAAa;AAAA,QACxB,OAAO,aAAa,KAAK,YAAY;AAAA,QACrC,KAAK,KAAK;AAAA,MACX;AACD,UAAI,SAAS,KAAK,KAAK,GAAG;AACxB,2BAAmB,gBAAgB,KAAK;AAAA,MACzC;AACD,YAAM,UAAU,KAAK,aAAa;AAClC,UAAI,KAAK,aAAa,SAAS;AAC7B,2BAAmB,UAAU,WAAW,OAAO,IAAI,QAAQ,SAAS;AAAA,MACrE;AACD,aAAO;AAAA,IACb,WAAe,gBAAgB,MAAM;AAC/B,aAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM,KAAK;AAAA,QACX,SAAS,KAAK;AAAA,QACd,YAAY,kBAAkB,KAAK,UAAU;AAAA,MAC9C;AAAA,IAEP,OAAW;AACL,YAAM,MAAM,sBAAsB;AAAA,IACnC;AAAA,EACF;AAED,QAAM,YAAY;AAAA,IAChB,MAAM,MAAM;AACV,YAAM,UAAU;AAChB,cAAQ,QAAQ,aAAW;AAAA,QACzB,KAAK;AACH,iBAAO,KAAK,iBAAiB,OAAO;AAAA,QACtC,KAAK;AACH,iBAAO,KAAK,iBAAiB,OAAO;AAAA,QACtC,KAAK;AACH,iBAAO,KAAK,YAAY,OAAO;AAAA,QACjC,KAAK;AACH,iBAAO,KAAK,yBAAyB,OAAO;AAAA,QAC9C,KAAK;AACH,iBAAO,KAAK,sCAAsC,OAAO;AAAA,QAC3D,KAAK;AACH,iBAAO,KAAK,6BAA6B,OAAO;AAAA,QAClD,KAAK;AACH,iBAAO,KAAK,gBAAgB,OAAO;AAAA,QACrC,KAAK;AACH,iBAAO,KAAK,iBAAiB,OAAO;AAAA,QACtC,KAAK;AACH,iBAAO,KAAK,cAAc,OAAO;AAAA,QACnC,KAAK;AACH,iBAAO,KAAK,UAAU,OAAO;AAAA,QAE/B;AACE,gBAAM,MAAM,sBAAsB;AAAA,MACrC;AAAA,IACF;AAAA;AAAA,IAED,iBAAiB,MAAM;AAAA,IAAE;AAAA;AAAA,IAEzB,iBAAiB,MAAM;AAAA,IAAE;AAAA;AAAA,IAEzB,YAAY,MAAM;AAAA,IAAE;AAAA;AAAA,IAEpB,gBAAgB,MAAM;AAAA,IAAE;AAAA;AAAA,IAExB,yBAAyB,MAAM;AAAA,IAAE;AAAA;AAAA,IAEjC,sCAAsC,MAAM;AAAA,IAAE;AAAA;AAAA,IAE9C,6BAA6B,MAAM;AAAA,IAAE;AAAA;AAAA,IAErC,iBAAiB,MAAM;AAAA,IAAE;AAAA;AAAA,IAEzB,cAAc,MAAM;AAAA,IAAE;AAAA;AAAA,IAEtB,UAAU,MAAM;AAAA,IAAE;AAAA,EACnB;AAED,WAAS,eAAe,MAAM;AAC5B,WACE,gBAAgB,eAChB,gBAAgB,UAChB,gBAAgB,cAChB,gBAAgB,uBAChB,gBAAgB,oCAChB,gBAAgB,2BAChB,gBAAgB,YAChB,gBAAgB;AAAA,EAEnB;AACD,WAAS,eAAe,MAAM,iBAAiB,IAAI;AACjD,UAAM,qBACJ,gBAAgB,UAAU,gBAAgB,cAAc,gBAAgB;AAC1E,QAAI,oBAAoB;AACtB,aAAO;AAAA,IACR;AAID,QAAI,gBAAgB,aAAa;AAE/B,aAAO,KAAK,KAAK,YAAY,CAAC,YAAY;AACxC,eAAO,eAAe,SAAS,cAAc;AAAA,MACrD,CAAO;AAAA,IACP,WAAe,gBAAgB,eAAe,SAAS,gBAAgB,IAAI,GAAG;AAExE,aAAO;AAAA,IACb,WAAe,gBAAgB,oBAAoB;AAC7C,UAAI,gBAAgB,aAAa;AAC/B,uBAAe,KAAK,IAAI;AAAA,MACzB;AACD,aAAO,MAAM,KAAK,YAAY,CAAC,YAAY;AACzC,eAAO,eAAe,SAAS,cAAc;AAAA,MACrD,CAAO;AAAA,IACP,OAAW;AACL,aAAO;AAAA,IACR;AAAA,EACF;AACD,WAAS,gBAAgB,MAAM;AAC7B,WAAO,gBAAgB;AAAA,EACxB;AACD,WAAS,qBAAqB,MAAM;AAElC,QAAI,gBAAgB,aAAa;AAC/B,aAAO;AAAA,IACb,WAAe,gBAAgB,QAAQ;AACjC,aAAO;AAAA,IACb,WAAe,gBAAgB,aAAa;AACtC,aAAO;AAAA,IACb,WAAe,gBAAgB,qBAAqB;AAC9C,aAAO;AAAA,IACb,WAAe,gBAAgB,kCAAkC;AAC3D,aAAO;AAAA,IACb,WAAe,gBAAgB,yBAAyB;AAClD,aAAO;AAAA,IACb,WAAe,gBAAgB,YAAY;AACrC,aAAO;AAAA,IACb,WAAe,gBAAgB,UAAU;AACnC,aAAO;AAAA,IAEb,OAAW;AACL,YAAM,MAAM,sBAAsB;AAAA,IACnC;AAAA,EACF;AAKD,QAAM,WAAW;AAAA,IACf,KAAK,MAAM,WAAW,IAAI;AACxB,cAAQ,KAAK,YAAY,CAAC,SAAS,UAAU;AAC3C,cAAM,WAAW,KAAK,KAAK,YAAY,QAAQ,CAAC;AAEhD,YAAI,mBAAmB,aAAa;AAClC,eAAK,YAAY,SAAS,UAAU,QAAQ;AAAA,QACtD,WAAmB,mBAAmB,UAAU;AACtC,eAAK,aAAa,SAAS,UAAU,QAAQ;AAAA,QACvD,WAAmB,mBAAmB,aAAa;AACzC,eAAK,SAAS,SAAS,UAAU,QAAQ;AAAA,QACnD,WAAmB,mBAAmB,QAAQ;AACpC,eAAK,WAAW,SAAS,UAAU,QAAQ;AAAA,QACrD,WAAmB,mBAAmB,qBAAqB;AACjD,eAAK,eAAe,SAAS,UAAU,QAAQ;AAAA,QACzD,WAAmB,mBAAmB,kCAAkC;AAC9D,eAAK,kBAAkB,SAAS,UAAU,QAAQ;AAAA,QAC5D,WAAmB,mBAAmB,yBAAyB;AACrD,eAAK,YAAY,SAAS,UAAU,QAAQ;AAAA,QACtD,WAAmB,mBAAmB,YAAY;AACxC,eAAK,SAAS,SAAS,UAAU,QAAQ;AAAA,QACnD,WAAmB,mBAAmB,aAAa;AACzC,eAAK,OAAO,SAAS,UAAU,QAAQ;AAAA,QACjD,OAAe;AACL,gBAAM,MAAM,sBAAsB;AAAA,QACnC;AAAA,MACT,CAAO;AAAA,IACF;AAAA,IACD,aAAa,UAAU,UAAU,UAAU;AAAA,IAAE;AAAA,IAC7C,YAAY,SAAS,UAAU,UAAU;AAAA,IAAE;AAAA,IAC3C,SAAS,UAAU,UAAU,UAAU;AAErC,YAAM,aAAa,SAAS,OAAO,QAAQ;AAC3C,WAAK,KAAK,UAAU,UAAU;AAAA,IAC/B;AAAA,IACD,WAAW,YAAY,UAAU,UAAU;AAEzC,YAAM,aAAa,SAAS,OAAO,QAAQ;AAC3C,WAAK,KAAK,YAAY,UAAU;AAAA,IACjC;AAAA,IACD,eAAe,gBAAgB,UAAU,UAAU;AAEjD,YAAM,qBAAqB,CAAC,IAAI,OAAO,EAAE,YAAY,eAAe,WAAU,CAAE,CAAC,EAAE,OAAO,UAAU,QAAQ;AAC5G,WAAK,KAAK,gBAAgB,kBAAkB;AAAA,IAC7C;AAAA,IACD,kBAAkB,mBAAmB,UAAU,UAAU;AAEvD,YAAM,wBAAwB,+BAA+B,mBAAmB,UAAU,QAAQ;AAClG,WAAK,KAAK,mBAAmB,qBAAqB;AAAA,IACnD;AAAA,IACD,SAAS,UAAU,UAAU,UAAU;AAErC,YAAM,eAAe,CAAC,IAAI,OAAO,EAAE,YAAY,SAAS,WAAU,CAAE,CAAC,EAAE,OAAO,UAAU,QAAQ;AAChG,WAAK,KAAK,UAAU,YAAY;AAAA,IACjC;AAAA,IACD,YAAY,aAAa,UAAU,UAAU;AAE3C,YAAM,kBAAkB,+BAA+B,aAAa,UAAU,QAAQ;AACtF,WAAK,KAAK,aAAa,eAAe;AAAA,IACvC;AAAA,IACD,OAAO,QAAQ,UAAU,UAAU;AAEjC,YAAM,aAAa,SAAS,OAAO,QAAQ;AAE3C,cAAQ,OAAO,YAAY,CAAC,QAAQ;AAIlC,cAAM,cAAc,IAAI,YAAY,EAAE,YAAY,CAAC,GAAG,GAAG;AACzD,aAAK,KAAK,aAAa,UAAU;AAAA,MACzC,CAAO;AAAA,IACF;AAAA,EACF;AACD,WAAS,+BAA+B,YAAY,UAAU,UAAU;AACtE,UAAM,aAAa;AAAA,MACjB,IAAI,OAAO;AAAA,QACT,YAAY,CAAC,IAAI,SAAS,EAAE,cAAc,WAAW,UAAS,CAAE,CAAC,EAAE,OAAO,WAAW,UAAU;AAAA,MACvG,CAAO;AAAA,IACF;AACD,UAAM,iBAAiB,WAAW,OAAO,UAAU,QAAQ;AAC3D,WAAO;AAAA,EACR;AAED,WAAS,MAAM,MAAM;AAEnB,QAAI,gBAAgB,aAAa;AAS/B,aAAO,MAAM,KAAK,cAAc;AAAA,IACtC,WAAe,gBAAgB,UAAU;AACnC,aAAO,iBAAiB,IAAI;AAAA,IAClC,WAAe,eAAe,IAAI,GAAG;AAC/B,aAAO,iBAAiB,IAAI;AAAA,IAClC,WAAe,gBAAgB,IAAI,GAAG;AAChC,aAAO,kBAAkB,IAAI;AAAA,IACnC,OAAW;AACL,YAAM,MAAM,sBAAsB;AAAA,IACnC;AAAA,EACF;AACD,WAAS,iBAAiB,MAAM;AAC9B,QAAI,WAAW,CAAE;AACjB,UAAM,MAAM,KAAK;AACjB,QAAI,iBAAiB;AACrB,QAAI,yBAAyB,IAAI,SAAS;AAC1C,QAAI;AAEJ,QAAI,0BAA0B;AAE9B,WAAO,0BAA0B,yBAAyB;AACxD,oBAAc,IAAI,cAAc;AAChC,gCAA0B,eAAe,WAAW;AACpD,iBAAW,SAAS,OAAO,MAAM,WAAW,CAAC;AAC7C,uBAAiB,iBAAiB;AAClC,+BAAyB,IAAI,SAAS;AAAA,IACvC;AACD,WAAO,KAAK,QAAQ;AAAA,EACrB;AACD,WAAS,kBAAkB,MAAM;AAC/B,UAAM,wBAAwB,IAAI,KAAK,YAAY,CAAC,cAAc;AAChE,aAAO,MAAM,SAAS;AAAA,IAC5B,CAAK;AACD,WAAO,KAAK,QAAQ,qBAAqB,CAAC;AAAA,EAC3C;AACD,WAAS,iBAAiB,UAAU;AAClC,WAAO,CAAC,SAAS,YAAY;AAAA,EAC9B;AAGD,QAAM,KAAK;AAIX,QAAM,4BAA4B,WAAW;AAAA,IAC3C,YAAY,SAAS;AACnB,YAAO;AACP,WAAK,UAAU;AACf,WAAK,UAAU,CAAE;AAAA,IAClB;AAAA,IACD,eAAe;AACb,WAAK,KAAK,KAAK,OAAO;AACtB,aAAO,KAAK;AAAA,IACb;AAAA,IACD,aAAa,UAAU,UAAU,UAAU;AAAA,IAE1C;AAAA,IACD,YAAY,SAAS,UAAU,UAAU;AACvC,YAAM,aAAa,8BAA8B,QAAQ,gBAAgB,QAAQ,GAAG,IAAI,KAAK,QAAQ;AACrG,YAAM,WAAW,SAAS,OAAO,QAAQ;AACzC,YAAM,WAAW,IAAI,YAAY,EAAE,YAAY,SAAQ,CAAE;AACzD,YAAM,uBAAuB,MAAM,QAAQ;AAC3C,WAAK,QAAQ,UAAU,IAAI;AAAA,IAC5B;AAAA,EACF;AACD,WAAS,uBAAuB,gBAAgB;AAC9C,UAAM,gBAAgB,CAAE;AACxB,YAAQ,gBAAgB,CAAC,YAAY;AACnC,YAAM,iBAAiB,IAAI,oBAAoB,OAAO,EAAE,aAAc;AACtE,eAAS,eAAe,cAAc;AAAA,IAC5C,CAAK;AACD,WAAO;AAAA,EACR;AACD,WAAS,8BAA8B,OAAO,mBAAmB;AAC/D,WAAO,MAAM,OAAO,oBAAoB;AAAA,EACzC;AAED,WAAS,GAAG,MAAM;AAChB,WAAO,KAAK,WAAW,CAAC;AAAA,EACzB;AACD,WAAS,YAAY,MAAM,KAAK;AAC9B,QAAI,MAAM,QAAQ,IAAI,GAAG;AACvB,WAAK,QAAQ,SAAU,SAAS;AAC9B,YAAI,KAAK,OAAO;AAAA,MACxB,CAAO;AAAA,IACP,OAAW;AACL,UAAI,KAAK,IAAI;AAAA,IACd;AAAA,EACF;AACD,WAAS,QAAQ,SAAS,SAAS;AACjC,QAAI,QAAQ,OAAO,MAAM,MAAM;AAC7B,YAAM,oBAAoB;AAAA,IAC3B;AACD,YAAQ,OAAO;AACf,YAAQ,OAAO,IAAI;AAAA,EACpB;AACD,WAAS,cAAc,KAAK;AAE1B,QAAI,QAAQ,QAAW;AACrB,YAAM,MAAM,yCAAyC;AAAA,IACtD;AACD,WAAO;AAAA,EACR;AAED,WAAS,0BAA0B;AACjC,UAAM,MAAM,yCAAyC;AAAA,EACtD;AACD,WAAS,YAAY,KAAK;AACxB,WAAO,IAAI,MAAM,MAAM;AAAA,EACxB;AAED,QAAM,kBAAkB,CAAE;AAC1B,WAAS,IAAI,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK;AACvC,oBAAgB,KAAK,CAAC;AAAA,EACvB;AACD,QAAM,gBAAgB,CAAC,GAAG,GAAG,CAAC,EAAE,OAAO,eAAe;AACtD,WAAS,IAAI,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK;AACvC,kBAAc,KAAK,CAAC;AAAA,EACrB;AACD,WAAS,IAAI,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK;AACvC,kBAAc,KAAK,CAAC;AAAA,EACrB;AAED,QAAM,kBAAkB;AAAA,IACtB,GAAG,GAAG;AAAA,IACN,GAAG,IAAI;AAAA,IACP,GAAG,IAAI;AAAA,IACP,GAAG,IAAI;AAAA,IACP,GAAG,GAAI;AAAA,IACP,GAAG,IAAI;AAAA,IACP,GAAG,GAAI;AAAA,IACP,GAAG,GAAQ;AAAA,IACX,GAAG,GAAQ;AAAA,IACX,GAAG,GAAQ;AAAA,IACX,GAAG,GAAQ;AAAA,IACX,GAAG,GAAQ;AAAA,IACX,GAAG,GAAQ;AAAA,IACX,GAAG,GAAQ;AAAA,IACX,GAAG,GAAQ;AAAA,IACX,GAAG,GAAQ;AAAA,IACX,GAAG,GAAQ;AAAA,IACX,GAAG,GAAQ;AAAA,IACX,GAAG,GAAQ;AAAA,IACX,GAAG,GAAQ;AAAA,IACX,GAAG,QAAQ;AAAA,IACX,GAAG,QAAQ;AAAA,IACX,GAAG,GAAQ;AAAA,IACX,GAAG,GAAQ;AAAA,IACX,GAAG,GAAQ;AAAA,IACX,GAAG,QAAQ;AAAA,EACZ;AAGD,QAAM,kBAAkB;AACxB,QAAM,iBAAiB;AACvB,QAAM,uBAAuB;AAG7B,QAAM,aAAa;AAAA,IACjB,cAAc;AACZ,WAAK,MAAM;AACX,WAAK,QAAQ;AACb,WAAK,WAAW;AAAA,IACjB;AAAA,IACD,YAAY;AACV,aAAO;AAAA,QACL,KAAK,KAAK;AAAA,QACV,OAAO,KAAK;AAAA,QACZ,UAAU,KAAK;AAAA,MAChB;AAAA,IACF;AAAA,IACD,aAAa,UAAU;AACrB,WAAK,MAAM,SAAS;AACpB,WAAK,QAAQ,SAAS;AACtB,WAAK,WAAW,SAAS;AAAA,IAC1B;AAAA,IACD,QAAQ,OAAO;AAEb,WAAK,MAAM;AACX,WAAK,QAAQ;AACb,WAAK,WAAW;AAChB,WAAK,YAAY,GAAG;AACpB,YAAM,QAAQ,KAAK,YAAa;AAChC,WAAK,YAAY,GAAG;AACpB,YAAM,QAAQ;AAAA,QACZ,MAAM;AAAA,QACN,KAAK,EAAE,OAAO,KAAK,KAAK,KAAK,MAAM,OAAQ;AAAA,QAC3C,QAAQ;AAAA,QACR,YAAY;AAAA,QACZ,WAAW;AAAA,QACX,SAAS;AAAA,QACT,QAAQ;AAAA,MACT;AACD,aAAO,KAAK,gBAAgB;AAC1B,gBAAQ,KAAK,QAAS,GAAA;AAAA,UACpB,KAAK;AACH,oBAAQ,OAAO,QAAQ;AACvB;AAAA,UACF,KAAK;AACH,oBAAQ,OAAO,YAAY;AAC3B;AAAA,UACF,KAAK;AACH,oBAAQ,OAAO,WAAW;AAC1B;AAAA,UACF,KAAK;AACH,oBAAQ,OAAO,SAAS;AACxB;AAAA,UACF,KAAK;AACH,oBAAQ,OAAO,QAAQ;AACvB;AAAA,QACH;AAAA,MACF;AACD,UAAI,KAAK,QAAQ,KAAK,MAAM,QAAQ;AAClC,cAAM,MAAM,sBAAsB,KAAK,MAAM,UAAU,KAAK,GAAG,CAAC;AAAA,MACjE;AACD,aAAO;AAAA,QACL,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA,KAAK,KAAK,IAAI,CAAC;AAAA,MAChB;AAAA,IACF;AAAA,IACD,cAAc;AACZ,YAAM,OAAO,CAAE;AACf,YAAM,QAAQ,KAAK;AACnB,WAAK,KAAK,KAAK,aAAa;AAC5B,aAAO,KAAK,SAAU,MAAK,KAAK;AAC9B,aAAK,YAAY,GAAG;AACpB,aAAK,KAAK,KAAK,aAAa;AAAA,MAC7B;AACD,aAAO,EAAE,MAAM,eAAe,OAAO,MAAM,KAAK,KAAK,IAAI,KAAK,EAAG;AAAA,IAClE;AAAA,IACD,cAAc;AACZ,YAAM,QAAQ,CAAE;AAChB,YAAM,QAAQ,KAAK;AACnB,aAAO,KAAK,UAAU;AACpB,cAAM,KAAK,KAAK,MAAM;AAAA,MACvB;AACD,aAAO,EAAE,MAAM,eAAe,OAAO,OAAO,KAAK,KAAK,IAAI,KAAK,EAAG;AAAA,IACnE;AAAA,IACD,OAAO;AACL,UAAI,KAAK,eAAe;AACtB,eAAO,KAAK,UAAW;AAAA,MAC/B,OAAa;AACL,eAAO,KAAK,KAAM;AAAA,MACnB;AAAA,IACF;AAAA,IACD,YAAY;AACV,YAAM,QAAQ,KAAK;AACnB,cAAQ,KAAK,QAAS,GAAA;AAAA,QACpB,KAAK;AACH,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,KAAK,KAAK,IAAI,KAAK;AAAA,UACpB;AAAA,QACH,KAAK;AACH,iBAAO,EAAE,MAAM,aAAa,KAAK,KAAK,IAAI,KAAK,EAAG;AAAA,QAEpD,KAAK;AACH,kBAAQ,KAAK,QAAS,GAAA;AAAA,YACpB,KAAK;AACH,qBAAO;AAAA,gBACL,MAAM;AAAA,gBACN,KAAK,KAAK,IAAI,KAAK;AAAA,cACpB;AAAA,YACH,KAAK;AACH,qBAAO;AAAA,gBACL,MAAM;AAAA,gBACN,KAAK,KAAK,IAAI,KAAK;AAAA,cACpB;AAAA,UACJ;AAED,gBAAM,MAAM,0BAA0B;AAAA,QAExC,KAAK;AACH,eAAK,YAAY,GAAG;AACpB,cAAI;AACJ,kBAAQ,KAAK,QAAS,GAAA;AAAA,YACpB,KAAK;AACH,qBAAO;AACP;AAAA,YACF,KAAK;AACH,qBAAO;AACP;AAAA,UACH;AACD,wBAAc,IAAI;AAClB,gBAAM,cAAc,KAAK,YAAa;AACtC,eAAK,YAAY,GAAG;AACpB,iBAAO;AAAA,YACL;AAAA,YACA,OAAO;AAAA,YACP,KAAK,KAAK,IAAI,KAAK;AAAA,UACpB;AAAA,MACJ;AAED,aAAO,wBAAyB;AAAA,IACjC;AAAA,IACD,WAAW,iBAAiB,OAAO;AACjC,UAAI,QAAQ;AACZ,YAAM,QAAQ,KAAK;AACnB,cAAQ,KAAK,QAAS,GAAA;AAAA,QACpB,KAAK;AACH,kBAAQ;AAAA,YACN,SAAS;AAAA,YACT,QAAQ;AAAA,UACT;AACD;AAAA,QACF,KAAK;AACH,kBAAQ;AAAA,YACN,SAAS;AAAA,YACT,QAAQ;AAAA,UACT;AACD;AAAA,QACF,KAAK;AACH,kBAAQ;AAAA,YACN,SAAS;AAAA,YACT,QAAQ;AAAA,UACT;AACD;AAAA,QACF,KAAK;AACH,gBAAM,UAAU,KAAK,qBAAsB;AAC3C,kBAAQ,KAAK,QAAS,GAAA;AAAA,YACpB,KAAK;AACH,sBAAQ;AAAA,gBACN;AAAA,gBACA,QAAQ;AAAA,cACT;AACD;AAAA,YACF,KAAK;AACH,kBAAI;AACJ,kBAAI,KAAK,WAAW;AAClB,yBAAS,KAAK,qBAAsB;AACpC,wBAAQ;AAAA,kBACN;AAAA,kBACA;AAAA,gBACD;AAAA,cACjB,OAAqB;AACL,wBAAQ;AAAA,kBACN;AAAA,kBACA,QAAQ;AAAA,gBACT;AAAA,cACF;AACD,mBAAK,YAAY,GAAG;AACpB;AAAA,UACH;AAGD,cAAI,mBAAmB,QAAQ,UAAU,QAAW;AAClD,mBAAO;AAAA,UACR;AACD,wBAAc,KAAK;AACnB;AAAA,MACH;AAGD,UAAI,mBAAmB,QAAQ,UAAU,QAAW;AAClD,eAAO;AAAA,MACR;AAED,UAAI,cAAc,KAAK,GAAG;AACxB,YAAI,KAAK,SAAS,CAAC,MAAM,KAAK;AAC5B,eAAK,YAAY,GAAG;AACpB,gBAAM,SAAS;AAAA,QACzB,OAAe;AACL,gBAAM,SAAS;AAAA,QAChB;AACD,cAAM,OAAO;AACb,cAAM,MAAM,KAAK,IAAI,KAAK;AAC1B,eAAO;AAAA,MACR;AAAA,IACF;AAAA,IACD,OAAO;AACL,UAAI;AACJ,YAAM,QAAQ,KAAK;AACnB,cAAQ,KAAK,SAAU,GAAA;AAAA,QACrB,KAAK;AACH,iBAAO,KAAK,OAAQ;AACpB;AAAA,QACF,KAAK;AACH,iBAAO,KAAK,WAAY;AACxB;AAAA,QACF,KAAK;AACH,iBAAO,KAAK,eAAgB;AAC5B;AAAA,QACF,KAAK;AACH,iBAAO,KAAK,MAAO;AACnB;AAAA,MACH;AACD,UAAI,SAAS,UAAa,KAAK,mBAAkB,GAAI;AACnD,eAAO,KAAK,iBAAkB;AAAA,MAC/B;AAED,UAAI,cAAc,IAAI,GAAG;AACvB,aAAK,MAAM,KAAK,IAAI,KAAK;AACzB,YAAI,KAAK,gBAAgB;AACvB,eAAK,aAAa,KAAK,WAAY;AAAA,QACpC;AACD,eAAO;AAAA,MACR;AAAA,IACF;AAAA,IACD,SAAS;AACP,WAAK,YAAY,GAAG;AACpB,aAAO;AAAA,QACL,MAAM;AAAA,QACN,YAAY;AAAA,QACZ,OAAO,CAAC,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG,QAAQ,GAAG,GAAG,QAAQ,CAAC;AAAA,MACvD;AAAA,IACF;AAAA,IACD,aAAa;AACX,WAAK,YAAY,IAAI;AACrB,cAAQ,KAAK,SAAU,GAAA;AAAA,QACrB,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACH,iBAAO,KAAK,kBAAmB;AAAA,QACjC,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACH,iBAAO,KAAK,qBAAsB;AAAA,QACpC,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACH,iBAAO,KAAK,kBAAmB;AAAA,QACjC,KAAK;AACH,iBAAO,KAAK,wBAAyB;AAAA,QACvC,KAAK;AACH,iBAAO,KAAK,iBAAkB;AAAA,QAChC,KAAK;AACH,iBAAO,KAAK,sBAAuB;AAAA,QACrC,KAAK;AACH,iBAAO,KAAK,gCAAiC;AAAA,QAC/C;AACE,iBAAO,KAAK,mBAAoB;AAAA,MACnC;AAAA,IACF;AAAA,IACD,oBAAoB;AAClB,YAAM,QAAQ,KAAK,gBAAiB;AACpC,aAAO,EAAE,MAAM,sBAAsB,MAAc;AAAA,IACpD;AAAA,IACD,uBAAuB;AACrB,UAAI;AACJ,UAAI,aAAa;AACjB,cAAQ,KAAK,QAAS,GAAA;AAAA,QACpB,KAAK;AACH,gBAAM;AACN;AAAA,QACF,KAAK;AACH,gBAAM;AACN,uBAAa;AACb;AAAA,QACF,KAAK;AACH,gBAAM;AACN;AAAA,QACF,KAAK;AACH,gBAAM;AACN,uBAAa;AACb;AAAA,QACF,KAAK;AACH,gBAAM;AACN;AAAA,QACF,KAAK;AACH,gBAAM;AACN,uBAAa;AACb;AAAA,MACH;AAED,UAAI,cAAc,GAAG,GAAG;AACtB,eAAO,EAAE,MAAM,OAAO,OAAO,KAAK,WAAwB;AAAA,MAC3D;AAAA,IACF;AAAA,IACD,oBAAoB;AAClB,UAAI;AACJ,cAAQ,KAAK,QAAS,GAAA;AAAA,QACpB,KAAK;AACH,uBAAa,GAAG,IAAI;AACpB;AAAA,QACF,KAAK;AACH,uBAAa,GAAG,IAAI;AACpB;AAAA,QACF,KAAK;AACH,uBAAa,GAAG,IAAI;AACpB;AAAA,QACF,KAAK;AACH,uBAAa,GAAG,GAAI;AACpB;AAAA,QACF,KAAK;AACH,uBAAa,GAAG,IAAI;AACpB;AAAA,MACH;AAED,UAAI,cAAc,UAAU,GAAG;AAC7B,eAAO,EAAE,MAAM,aAAa,OAAO,WAAY;AAAA,MAChD;AAAA,IACF;AAAA,IACD,0BAA0B;AACxB,WAAK,YAAY,GAAG;AACpB,YAAM,SAAS,KAAK,QAAS;AAC7B,UAAI,WAAW,KAAK,MAAM,MAAM,OAAO;AACrC,cAAM,MAAM,UAAU;AAAA,MACvB;AACD,YAAM,aAAa,OAAO,YAAa,EAAC,WAAW,CAAC,IAAI;AACxD,aAAO,EAAE,MAAM,aAAa,OAAO,WAAY;AAAA,IAChD;AAAA,IACD,mBAAmB;AAGjB,WAAK,YAAY,GAAG;AACpB,aAAO,EAAE,MAAM,aAAa,OAAO,GAAG,IAAI,EAAG;AAAA,IAC9C;AAAA,IACD,wBAAwB;AACtB,WAAK,YAAY,GAAG;AACpB,aAAO,KAAK,eAAe,CAAC;AAAA,IAC7B;AAAA,IACD,kCAAkC;AAChC,WAAK,YAAY,GAAG;AACpB,aAAO,KAAK,eAAe,CAAC;AAAA,IAC7B;AAAA,IACD,qBAAqB;AAGnB,YAAM,cAAc,KAAK,QAAS;AAClC,aAAO,EAAE,MAAM,aAAa,OAAO,GAAG,WAAW,EAAG;AAAA,IACrD;AAAA,IACD,4BAA4B;AAC1B,cAAQ,KAAK,SAAU,GAAA;AAAA,QAErB,KAAK;AAAA,QAEL,KAAK;AAAA,QAEL,KAAK;AAAA,QAEL,KAAK;AAAA,QAEL,KAAK;AAAA,QAEL,KAAK;AACH,gBAAM,MAAM,KAAK;AAAA,QACnB;AACE,gBAAM,WAAW,KAAK,QAAS;AAC/B,iBAAO,EAAE,MAAM,aAAa,OAAO,GAAG,QAAQ,EAAG;AAAA,MACpD;AAAA,IACF;AAAA,IACD,iBAAiB;AACf,YAAM,MAAM,CAAE;AACd,UAAI,aAAa;AACjB,WAAK,YAAY,GAAG;AACpB,UAAI,KAAK,SAAS,CAAC,MAAM,KAAK;AAC5B,aAAK,YAAY,GAAG;AACpB,qBAAa;AAAA,MACd;AACD,aAAO,KAAK,eAAe;AACzB,cAAM,OAAO,KAAK,UAAW;AAC7B,aAAK,SAAS;AACd,YAAI,YAAY,IAAI,KAAK,KAAK,YAAW,GAAI;AAC3C,eAAK,YAAY,GAAG;AACpB,gBAAM,KAAK,KAAK,UAAW;AAC3B,aAAG,SAAS;AAEZ,cAAI,YAAY,EAAE,GAAG;AACnB,gBAAI,GAAG,QAAQ,KAAK,OAAO;AACzB,oBAAM,MAAM,uCAAuC;AAAA,YACpD;AACD,gBAAI,KAAK,EAAE,MAAM,KAAK,OAAO,IAAI,GAAG,OAAO;AAAA,UACvD,OAAiB;AAEL,wBAAY,KAAK,OAAO,GAAG;AAC3B,gBAAI,KAAK,GAAG,GAAG,CAAC;AAChB,wBAAY,GAAG,OAAO,GAAG;AAAA,UAC1B;AAAA,QACX,OAAe;AACL,sBAAY,KAAK,OAAO,GAAG;AAAA,QAC5B;AAAA,MACF;AACD,WAAK,YAAY,GAAG;AACpB,aAAO,EAAE,MAAM,OAAO,YAAwB,OAAO,IAAK;AAAA,IAC3D;AAAA,IACD,YAAY;AACV,cAAQ,KAAK,SAAU,GAAA;AAAA,QAErB,KAAK;AAAA,QAEL,KAAK;AAAA,QAEL,KAAK;AAAA,QAEL,KAAK;AAAA,QAEL,KAAK;AACH,gBAAM,MAAM,KAAK;AAAA,QACnB,KAAK;AACH,iBAAO,KAAK,YAAa;AAAA,QAC3B;AACE,iBAAO,KAAK,0BAA2B;AAAA,MAC1C;AAAA,IACF;AAAA,IACD,cAAc;AACZ,WAAK,YAAY,IAAI;AACrB,cAAQ,KAAK,SAAU,GAAA;AAAA,QAGrB,KAAK;AACH,eAAK,YAAY,GAAG;AACpB,iBAAO,EAAE,MAAM,aAAa,OAAO,GAAG,IAAQ,EAAG;AAAA,QACnD,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACH,iBAAO,KAAK,qBAAsB;AAAA,QACpC,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACH,iBAAO,KAAK,kBAAmB;AAAA,QACjC,KAAK;AACH,iBAAO,KAAK,wBAAyB;AAAA,QACvC,KAAK;AACH,iBAAO,KAAK,iBAAkB;AAAA,QAChC,KAAK;AACH,iBAAO,KAAK,sBAAuB;AAAA,QACrC,KAAK;AACH,iBAAO,KAAK,gCAAiC;AAAA,QAC/C;AACE,iBAAO,KAAK,mBAAoB;AAAA,MACnC;AAAA,IACF;AAAA,IACD,QAAQ;AACN,UAAI,YAAY;AAChB,WAAK,YAAY,GAAG;AACpB,cAAQ,KAAK,SAAS,CAAC,GAAC;AAAA,QACtB,KAAK;AACH,eAAK,YAAY,GAAG;AACpB,eAAK,YAAY,GAAG;AACpB,sBAAY;AACZ;AAAA,QACF;AACE,eAAK;AACL;AAAA,MACH;AACD,YAAM,QAAQ,KAAK,YAAa;AAChC,WAAK,YAAY,GAAG;AACpB,YAAM,WAAW;AAAA,QACf,MAAM;AAAA,QACN;AAAA,QACA;AAAA,MACD;AACD,UAAI,WAAW;AACb,iBAAS,KAAK,IAAI,KAAK;AAAA,MACxB;AACD,aAAO;AAAA,IACR;AAAA,IACD,kBAAkB;AAChB,UAAI,SAAS,KAAK,QAAS;AAG3B,UAAI,qBAAqB,KAAK,MAAM,MAAM,OAAO;AAC/C,cAAM,MAAM,8BAA8B;AAAA,MAC3C;AACD,aAAO,eAAe,KAAK,KAAK,SAAS,CAAC,CAAC,GAAG;AAC5C,kBAAU,KAAK,QAAS;AAAA,MACzB;AACD,aAAO,SAAS,QAAQ,EAAE;AAAA,IAC3B;AAAA,IACD,uBAAuB;AACrB,UAAI,SAAS,KAAK,QAAS;AAC3B,UAAI,eAAe,KAAK,MAAM,MAAM,OAAO;AACzC,cAAM,MAAM,sBAAsB;AAAA,MACnC;AACD,aAAO,eAAe,KAAK,KAAK,SAAS,CAAC,CAAC,GAAG;AAC5C,kBAAU,KAAK,QAAS;AAAA,MACzB;AACD,aAAO,SAAS,QAAQ,EAAE;AAAA,IAC3B;AAAA,IACD,mBAAmB;AACjB,YAAM,WAAW,KAAK,QAAS;AAC/B,cAAQ,UAAQ;AAAA,QAEd,KAAK;AAAA,QAEL,KAAK;AAAA,QAEL,KAAK;AAAA,QAEL,KAAK;AAAA,QAEL,KAAK;AAAA,QAEL,KAAK;AAAA,QAEL,KAAK;AAAA,QAEL,KAAK;AAAA,QAEL,KAAK;AAAA,QAEL,KAAK;AAAA,QAEL,KAAK;AAAA,QAEL,KAAK;AAAA,QAEL,KAAK;AAAA,QAEL,KAAK;AAAA,QAEL,KAAK;AAEH,gBAAM,MAAM,KAAK;AAAA,QACnB;AACE,iBAAO,EAAE,MAAM,aAAa,OAAO,GAAG,QAAQ,EAAG;AAAA,MACpD;AAAA,IACF;AAAA,IACD,eAAe;AACb,cAAQ,KAAK,SAAS,CAAC,GAAC;AAAA,QACtB,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACH,iBAAO;AAAA,QACT;AACE,iBAAO;AAAA,MACV;AAAA,IACF;AAAA,IACD,cAAc;AACZ,aAAO,KAAK,SAAU,MAAK,OAAO,KAAK,YAAY,CAAC;AAAA,IACrD;AAAA,IACD,UAAU;AACR,aAAO,eAAe,KAAK,KAAK,SAAS,CAAC,CAAC;AAAA,IAC5C;AAAA,IACD,YAAY,UAAU,GAAG;AACvB,cAAQ,KAAK,SAAS,OAAO,GAAC;AAAA,QAC5B,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACH,iBAAO;AAAA,QACT;AACE,iBAAO;AAAA,MACV;AAAA,IACF;AAAA,IACD,SAAS;AACP,aAAO,KAAK,YAAY,KAAK,YAAa;AAAA,IAC3C;AAAA,IACD,SAAS;AACP,UAAI,KAAK,sBAAsB;AAC7B,eAAO;AAAA,MACR;AACD,cAAQ,KAAK,SAAS,CAAC,GAAC;AAAA,QACtB,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QAEL,KAAK;AACH,iBAAO;AAAA,QACT;AACE,iBAAO;AAAA,MACV;AAAA,IACF;AAAA,IACD,cAAc;AACZ,cAAQ,KAAK,SAAS,CAAC,GAAC;AAAA,QACtB,KAAK;AAAA,QACL,KAAK;AACH,iBAAO;AAAA,QAET,KAAK;AACH,kBAAQ,KAAK,SAAS,CAAC,GAAC;AAAA,YACtB,KAAK;AAAA,YACL,KAAK;AACH,qBAAO;AAAA,YACT;AACE,qBAAO;AAAA,UACV;AAAA,QAEH,KAAK;AACH,iBAAO,KAAK,SAAS,CAAC,MAAM,QAAQ,KAAK,SAAS,CAAC,MAAM,OAAO,KAAK,SAAS,CAAC,MAAM;AAAA,QACvF;AACE,iBAAO;AAAA,MACV;AAAA,IACF;AAAA,IACD,eAAe;AACb,YAAM,YAAY,KAAK,UAAW;AAClC,UAAI;AACF,eAAO,KAAK,WAAW,IAAI,MAAM;AAAA,MAClC,SAAQ,GAAP;AACA,eAAO;AAAA,MACf,UAAgB;AACR,aAAK,aAAa,SAAS;AAAA,MAC5B;AAAA,IACF;AAAA,IACD,qBAAqB;AACnB,cAAQ,KAAK,SAAU,GAAA;AAAA,QACrB,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACH,iBAAO;AAAA,QACT;AACE,iBAAO;AAAA,MACV;AAAA,IACF;AAAA,IACD,eAAe,SAAS;AACtB,UAAI,YAAY;AAChB,eAAS,IAAI,GAAG,IAAI,SAAS,KAAK;AAChC,cAAM,UAAU,KAAK,QAAS;AAC9B,YAAI,gBAAgB,KAAK,OAAO,MAAM,OAAO;AAC3C,gBAAM,MAAM,+BAA+B;AAAA,QAC5C;AACD,qBAAa;AAAA,MACd;AACD,YAAM,WAAW,SAAS,WAAW,EAAE;AACvC,aAAO,EAAE,MAAM,aAAa,OAAO,SAAU;AAAA,IAC9C;AAAA,IACD,SAAS,UAAU,GAAG;AACpB,aAAO,KAAK,MAAM,KAAK,MAAM,OAAO;AAAA,IACrC;AAAA,IACD,UAAU;AACR,YAAM,WAAW,KAAK,SAAS,CAAC;AAChC,WAAK,YAAY,MAAS;AAC1B,aAAO;AAAA,IACR;AAAA,IACD,YAAY,MAAM;AAChB,UAAI,SAAS,UAAa,KAAK,MAAM,KAAK,GAAG,MAAM,MAAM;AACvD,cAAM,MAAM,gBAAgB,OAAO,mBAAmB,KAAK,MAAM,KAAK,GAAG,IAAI,kBAAkB,KAAK,GAAG;AAAA,MACxG;AACD,UAAI,KAAK,OAAO,KAAK,MAAM,QAAQ;AACjC,cAAM,MAAM,yBAAyB;AAAA,MACtC;AACD,WAAK;AAAA,IACN;AAAA,IACD,IAAI,OAAO;AACT,aAAO,EAAE,OAAc,KAAK,KAAK,IAAK;AAAA,IACvC;AAAA,EACF;AAED,QAAM,kBAAkB;AAAA,IACtB,cAAc,MAAM;AAClB,iBAAW,OAAO,MAAM;AACtB,cAAM,QAAQ,KAAK,GAAG;AAEtB,YAAI,KAAK,eAAe,GAAG,GAAG;AAC5B,cAAI,MAAM,SAAS,QAAW;AAC5B,iBAAK,MAAM,KAAK;AAAA,UACjB,WAAU,MAAM,QAAQ,KAAK,GAAG;AAC/B,kBAAM,QAAQ,CAAC,aAAa;AAC1B,mBAAK,MAAM,QAAQ;AAAA,YACpB,GAAE,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACD,MAAM,MAAM;AACV,cAAQ,KAAK,MAAI;AAAA,QACf,KAAK;AACH,eAAK,aAAa,IAAI;AACtB;AAAA,QACF,KAAK;AACH,eAAK,WAAW,IAAI;AACpB;AAAA,QACF,KAAK;AACH,eAAK,iBAAiB,IAAI;AAC1B;AAAA,QACF,KAAK;AACH,eAAK,iBAAiB,IAAI;AAC1B;AAAA,QACF,KAAK;AACH,eAAK,iBAAiB,IAAI;AAC1B;AAAA,QACF,KAAK;AACH,eAAK,eAAe,IAAI;AACxB;AAAA,QACF,KAAK;AACH,eAAK,kBAAkB,IAAI;AAC3B;AAAA,QACF,KAAK;AACH,eAAK,qBAAqB,IAAI;AAC9B;AAAA,QACF,KAAK;AACH,eAAK,eAAe,IAAI;AACxB;AAAA,QACF,KAAK;AACH,eAAK,uBAAuB,IAAI;AAChC;AAAA,QACF,KAAK;AACH,eAAK,eAAe,IAAI;AACxB;AAAA,QACF,KAAK;AACH,eAAK,SAAS,IAAI;AAClB;AAAA,QACF,KAAK;AACH,eAAK,WAAW,IAAI;AACpB;AAAA,QACF,KAAK;AACH,eAAK,wBAAwB,IAAI;AACjC;AAAA,QACF,KAAK;AACH,eAAK,gBAAgB,IAAI;AACzB;AAAA,MACH;AACD,WAAK,cAAc,IAAI;AAAA,IACxB;AAAA,IACD,aAAa,MAAM;AAAA,IAAE;AAAA,IACrB,WAAW,MAAM;AAAA,IAAE;AAAA,IACnB,iBAAiB,MAAM;AAAA,IAAE;AAAA,IACzB,iBAAiB,MAAM;AAAA,IAAE;AAAA;AAAA,IAEzB,iBAAiB,MAAM;AAAA,IAAE;AAAA,IACzB,eAAe,MAAM;AAAA,IAAE;AAAA,IACvB,kBAAkB,MAAM;AAAA,IAAE;AAAA,IAC1B,qBAAqB,MAAM;AAAA,IAAE;AAAA,IAC7B,eAAe,MAAM;AAAA,IAAE;AAAA,IACvB,uBAAuB,MAAM;AAAA,IAAE;AAAA;AAAA,IAE/B,eAAe,MAAM;AAAA,IAAE;AAAA,IACvB,SAAS,MAAM;AAAA,IAAE;AAAA,IACjB,WAAW,MAAM;AAAA,IAAE;AAAA,IACnB,wBAAwB,MAAM;AAAA,IAAE;AAAA,IAChC,gBAAgB,MAAM;AAAA,IAAE;AAAA,EACzB;AAED,MAAI,iBAAiB,CAAE;AACvB,QAAM,eAAe,IAAI,aAAc;AACvC,WAAS,aAAa,QAAQ;AAC5B,UAAM,YAAY,OAAO,SAAU;AACnC,QAAI,eAAe,eAAe,SAAS,GAAG;AAC5C,aAAO,eAAe,SAAS;AAAA,IACrC,OAAW;AACL,YAAM,YAAY,aAAa,QAAQ,SAAS;AAChD,qBAAe,SAAS,IAAI;AAC5B,aAAO;AAAA,IACR;AAAA,EACF;AACD,WAAS,yBAAyB;AAChC,qBAAiB,CAAE;AAAA,EACpB;AAED,QAAM,yBAAyB;AAC/B,QAAM,8BAA8B;AACpC,WAAS,8BAA8B,QAAQ,sBAAsB,OAAO;AAC1E,QAAI;AACF,YAAM,MAAM,aAAa,MAAM;AAC/B,YAAM,aAAa,0BAA0B,IAAI,OAAO,CAAA,GAAI,IAAI,MAAM,UAAU;AAChF,aAAO;AAAA,IACR,SAAQ,GAAP;AAIA,UAAI,EAAE,YAAY,wBAAwB;AACxC,YAAI,qBAAqB;AACvB;AAAA,YACE,GAAG,qDAC0B,OAAO,SAAQ;AAAA;AAAA;AAAA;AAAA,UAI7C;AAAA,QACF;AAAA,MACT,OAAa;AACL,YAAI,YAAY;AAChB,YAAI,qBAAqB;AACvB,sBACE;AAAA,QAEH;AACD;AAAA,UACE,GAAG;AAAA,qBACsB,OAAO,SAAQ;AAAA;AAAA,6EAGtC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AACD,WAAO,CAAE;AAAA,EACV;AACD,WAAS,0BAA0B,KAAK,QAAQ,YAAY;AAC1D,YAAQ,IAAI,MAAI;AAAA,MACd,KAAK;AACH,iBAAS,IAAI,GAAG,IAAI,IAAI,MAAM,QAAQ,KAAK;AACzC,oCAA0B,IAAI,MAAM,CAAC,GAAG,QAAQ,UAAU;AAAA,QAC3D;AACD;AAAA,MACF,KAAK;AACH,cAAM,QAAQ,IAAI;AAClB,iBAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,gBAAM,OAAO,MAAM,CAAC;AAEpB,kBAAQ,KAAK,MAAI;AAAA,YACf,KAAK;AAAA,YAIL,KAAK;AAAA,YAEL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AACH;AAAA,UACH;AACD,gBAAM,OAAO;AACb,kBAAQ,KAAK,MAAI;AAAA,YACf,KAAK;AACH,sCAAwB,KAAK,OAAO,QAAQ,UAAU;AACtD;AAAA,YACF,KAAK;AACH,kBAAI,KAAK,eAAe,MAAM;AAC5B,sBAAM,MAAM,sBAAsB;AAAA,cACnC;AACD,sBAAQ,KAAK,OAAO,CAAC,SAAS;AAC5B,oBAAI,OAAO,SAAS,UAAU;AAC5B,0CAAwB,MAAM,QAAQ,UAAU;AAAA,gBAClE,OAAuB;AAEL,wBAAM,QAAQ;AAEd,sBAAI,eAAe,MAAM;AACvB,6BAAS,YAAY,MAAM,MAAM,aAAa,MAAM,IAAI,aAAa;AACnE,8CAAwB,WAAW,QAAQ,UAAU;AAAA,oBACtD;AAAA,kBACF,OAEI;AAEH,6BACM,YAAY,MAAM,MACtB,aAAa,MAAM,MAAM,YAAY,oBACrC,aACA;AACA,8CAAwB,WAAW,QAAQ,UAAU;AAAA,oBACtD;AAED,wBAAI,MAAM,MAAM,oBAAoB;AAClC,4BAAM,cAAc,MAAM,QAAQ,qBAAqB,MAAM,OAAO;AACpE,4BAAM,cAAc,MAAM;AAC1B,4BAAM,YAAY,yBAAyB,WAAW;AACtD,4BAAM,YAAY,yBAAyB,WAAW;AACtD,+BAAS,aAAa,WAAW,cAAc,WAAW,cAAc;AACtE,+BAAO,UAAU,IAAI;AAAA,sBACtB;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA,cACjB,CAAe;AACD;AAAA,YACF,KAAK;AACH,wCAA0B,KAAK,OAAO,QAAQ,UAAU;AACxD;AAAA,YAEF;AACE,oBAAM,MAAM,sBAAsB;AAAA,UACrC;AAED,gBAAM,uBAAuB,KAAK,eAAe,UAAa,KAAK,WAAW,YAAY;AAC1F;AAAA;AAAA;AAAA,YAGG,KAAK,SAAS,WAAW,gBAAgB,IAAI,MAAM;AAAA,YAEnD,KAAK,SAAS,WAAW,yBAAyB;AAAA,YACnD;AACA;AAAA,UACD;AAAA,QACF;AACD;AAAA,MAEF;AACE,cAAM,MAAM,uBAAuB;AAAA,IACtC;AAED,WAAO,OAAO,MAAM;AAAA,EACrB;AACD,WAAS,wBAAwB,MAAM,QAAQ,YAAY;AACzD,UAAM,mBAAmB,yBAAyB,IAAI;AACtD,WAAO,gBAAgB,IAAI;AAC3B,QAAI,eAAe,MAAM;AACvB,uBAAiB,MAAM,MAAM;AAAA,IAC9B;AAAA,EACF;AACD,WAAS,iBAAiB,MAAM,QAAQ;AACtC,UAAM,OAAO,OAAO,aAAa,IAAI;AACrC,UAAM,YAAY,KAAK,YAAa;AAEpC,QAAI,cAAc,MAAM;AACtB,YAAM,mBAAmB,yBAAyB,UAAU,WAAW,CAAC,CAAC;AACzE,aAAO,gBAAgB,IAAI;AAAA,IACjC,OAAW;AACL,YAAM,YAAY,KAAK,YAAa;AACpC,UAAI,cAAc,MAAM;AACtB,cAAM,mBAAmB,yBAAyB,UAAU,WAAW,CAAC,CAAC;AACzE,eAAO,gBAAgB,IAAI;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;AACD,WAAS,SAAS,SAAS,iBAAiB;AAC1C,WAAO,OAAO,QAAQ,OAAO,CAAC,gBAAgB;AAC5C,UAAI,OAAO,gBAAgB,UAAU;AACnC,eAAO,SAAS,iBAAiB,WAAW;AAAA,MACpD,OAAa;AAEL,cAAM,QAAQ;AACd,eAAO,OAAO,iBAAiB,CAAC,eAAe,MAAM,QAAQ,cAAc,cAAc,MAAM,EAAE,MAAM;AAAA,MACxG;AAAA,IACP,CAAK;AAAA,EACF;AACD,WAAS,gBAAgB,KAAK;AAC5B,UAAM,aAAa,IAAI;AACvB,QAAI,cAAc,WAAW,YAAY,GAAG;AAC1C,aAAO;AAAA,IACR;AACD,QAAI,CAAC,IAAI,OAAO;AACd,aAAO;AAAA,IACR;AACD,WAAO,UAAU,IAAI,KAAK,IAAI,MAAM,IAAI,OAAO,eAAe,IAAI,gBAAgB,IAAI,KAAK;AAAA,EAC5F;AACD,QAAM,uBAAuB,kBAAkB;AAAA,IAC7C,YAAY,iBAAiB;AAC3B,YAAO;AACP,WAAK,kBAAkB;AACvB,WAAK,QAAQ;AAAA,IACd;AAAA,IACD,cAAc,MAAM;AAElB,UAAI,KAAK,UAAU,MAAM;AACvB;AAAA,MACD;AAGD,cAAQ,KAAK,MAAI;AAAA,QACf,KAAK;AACH,eAAK,eAAe,IAAI;AACxB;AAAA,QACF,KAAK;AACH,eAAK,uBAAuB,IAAI;AAChC;AAAA,MACH;AACD,YAAM,cAAc,IAAI;AAAA,IACzB;AAAA,IACD,eAAe,MAAM;AACnB,UAAI,SAAS,KAAK,iBAAiB,KAAK,KAAK,GAAG;AAC9C,aAAK,QAAQ;AAAA,MACd;AAAA,IACF;AAAA,IACD,SAAS,MAAM;AACb,UAAI,KAAK,YAAY;AACnB,YAAI,SAAS,MAAM,KAAK,eAAe,MAAM,QAAW;AACtD,eAAK,QAAQ;AAAA,QACd;AAAA,MACT,OAAa;AACL,YAAI,SAAS,MAAM,KAAK,eAAe,MAAM,QAAW;AACtD,eAAK,QAAQ;AAAA,QACd;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACD,WAAS,iBAAiB,WAAW,SAAS;AAC5C,QAAI,mBAAmB,QAAQ;AAC7B,YAAM,MAAM,aAAa,OAAO;AAChC,YAAM,iBAAiB,IAAI,eAAe,SAAS;AACnD,qBAAe,MAAM,GAAG;AACxB,aAAO,eAAe;AAAA,IAC5B,OAAW;AACL,aACE,OAAO,SAAS,CAAC,SAAS;AACxB,eAAO,SAAS,WAAW,KAAK,WAAW,CAAC,CAAC;AAAA,MAC9C,CAAA,MAAM;AAAA,IAEV;AAAA,EACF;AAED,QAAM,UAAU;AAChB,QAAM,eAAe;AACrB,QAAM,QAAQ;AACd,MAAI,iBAAiB,OAAO,IAAI,OAAO,MAAM,EAAE,WAAW;AAC1D,WAAS,kBAAkB,YAAY,SAAS;AAC9C,cAAU,WAAW,SAAS;AAAA,MAC5B,WAAW;AAAA,MACX,OAAO;AAAA,MACP,UAAU;AAAA,MACV,kBAAkB;AAAA,MAClB,0BAA0B,CAAC,MAAM,IAAI;AAAA,MACrC,QAAQ,CAAC,KAAK,WAAW,OAAQ;AAAA,IACvC,CAAK;AACD,UAAM,SAAS,QAAQ;AACvB,WAAO,mCAAmC,MAAM;AAC9C,sCAAiC;AAAA,IACvC,CAAK;AACD,QAAI;AACJ,WAAO,mBAAmB,MAAM;AAC9B,0BAAoB,OAAO,YAAY,CAAC,aAAa;AACnD,eAAO,SAAS,OAAO,MAAMC,OAAM;AAAA,MAC3C,CAAO;AAAA,IACP,CAAK;AACD,QAAI,YAAY;AAChB,QAAI;AACJ,WAAO,sBAAsB,MAAM;AACjC,kBAAY;AACZ,+BAAyB,IAAI,mBAAmB,CAAC,aAAa;AAC5D,cAAM,cAAc,SAAS,OAAO;AAEpC,YAAI,WAAW,WAAW,GAAG;AAC3B,gBAAM,eAAe,YAAY;AACjC,cACE,aAAa,WAAW;AAAA,UAExB,iBAAiB,OACjB,iBAAiB,OACjB,iBAAiB,OACjB,CAAC,YAAY,YACb;AACA,mBAAO;AAAA,UACnB,WACY,aAAa,WAAW,KACxB,aAAa,CAAC,MAAM;AAAA,UAEpB,CAAC,SAAS,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,GAAG,aAAa,CAAC,CAAC,GAC3G;AAIA,mBAAO,aAAa,CAAC;AAAA,UACjC,OAAiB;AACL,mBAAO,QAAQ,YAAY,cAAc,WAAW,IAAI,gBAAgB,WAAW;AAAA,UACpF;AAAA,QACX,WAAmB,WAAW,WAAW,GAAG;AAClC,sBAAY;AAEZ,iBAAO,EAAE,MAAM,YAAa;AAAA,QACtC,WAAmB,OAAO,gBAAgB,UAAU;AAC1C,sBAAY;AAEZ,iBAAO;AAAA,QACjB,WAAmB,OAAO,gBAAgB,UAAU;AAC1C,cAAI,YAAY,WAAW,GAAG;AAC5B,mBAAO;AAAA,UACnB,OAAiB;AACL,kBAAM,sBAAsB,YAAY,QAAQ,uBAAuB,MAAM;AAC7E,kBAAM,gBAAgB,IAAI,OAAO,mBAAmB;AACpD,mBAAO,QAAQ,YAAY,cAAc,aAAa,IAAI,gBAAgB,aAAa;AAAA,UACxF;AAAA,QACX,OAAe;AACL,gBAAM,MAAM,sBAAsB;AAAA,QACnC;AAAA,MACT,CAAO;AAAA,IACP,CAAK;AACD,QAAI;AACJ,QAAI;AACJ,QAAI;AACJ,QAAI;AACJ,QAAI;AACJ,WAAO,gBAAgB,MAAM;AAC3B,yBAAmB,IAAI,mBAAmB,CAAC,aAAa,SAAS,YAAY;AAC7E,0BAAoB,IAAI,mBAAmB,CAAC,UAAU;AACpD,cAAM,YAAY,MAAM;AAExB,YAAI,cAAcA,OAAM,SAAS;AAC/B,iBAAO;AAAA,QACjB,WAAmB,SAAS,SAAS,GAAG;AAC9B,iBAAO;AAAA,QACjB,WAAmB,YAAY,SAAS,GAAG;AACjC,iBAAO;AAAA,QACjB,OAAe;AACL,gBAAM,MAAM,sBAAsB;AAAA,QACnC;AAAA,MACT,CAAO;AACD,oCAA8B,IAAI,mBAAmB,CAAC,UAAU;AAC9D,cAAM,gBAAgB,MAAM;AAC5B,YAAI,eAAe;AACjB,gBAAM,kBAAkB,UAAU,aAAa,IAC3C,IAAI,eAAe,CAAC,SAAS,QAAQ,mBAAmB,IAAI,CAAC,IAC7D,CAAC,QAAQ,mBAAmB,aAAa,CAAC;AAC9C,iBAAO;AAAA,QACR;AAAA,MACT,CAAO;AACD,6BAAuB,IAAI,mBAAmB,CAAC,UAAU,MAAM,SAAS;AACxE,4BAAsB,IAAI,mBAAmB,CAAC,UAAU,IAAI,OAAO,UAAU,CAAC;AAAA,IACpF,CAAK;AACD,QAAI;AACJ,WAAO,4BAA4B,MAAM;AACvC,YAAM,0BAA0B,aAAa,QAAQ,wBAAwB;AAC7E,sCAAgC,IAAI,mBAAmB,CAAC,YAAY,KAAK;AACzE,UAAI,QAAQ,qBAAqB,cAAc;AAC7C,wCAAgC,IAAI,mBAAmB,CAAC,YAAY;AAClE,cAAI,IAAI,SAAS,aAAa,GAAG;AAC/B,mBAAO,CAAC,CAAC,QAAQ;AAAA,UAC7B,OAAiB;AACL,mBACE,sBAAsB,SAAS,uBAAuB,MAAM,SAC5D,iBAAiB,yBAAyB,QAAQ,OAAO;AAAA,UAE5D;AAAA,QACX,CAAS;AAAA,MACF;AAAA,IACP,CAAK;AACD,QAAI;AACJ,QAAI;AACJ,QAAI;AACJ,QAAI;AACJ,WAAO,mBAAmB,MAAM;AAC9B,6BAAuB,IAAI,mBAAmB,eAAe;AAC7D,0BAAoB,IAAI,wBAAwB,cAAc;AAC9D,oBAAc;AAAA,QACZ;AAAA,QACA,CAAC,KAAK,UAAU;AACd,gBAAM,YAAY,MAAM;AACxB,cAAI,SAAS,SAAS,KAAK,EAAE,cAAcA,OAAM,UAAU;AACzD,gBAAI,SAAS,IAAI,CAAE;AAAA,UACpB;AACD,iBAAO;AAAA,QACR;AAAA,QACD,CAAE;AAAA,MACH;AACD,2BAAqB,IAAI,wBAAwB,CAAC,GAAG,QAAQ;AAC3D,eAAO;AAAA,UACL,SAAS,uBAAuB,GAAG;AAAA,UACnC,WAAW,4BAA4B,GAAG;AAAA,UAC1C,mBAAmB,8BAA8B,GAAG;AAAA,UACpD,UAAU,qBAAqB,GAAG;AAAA,UAClC,OAAO,kBAAkB,GAAG;AAAA,UAC5B,OAAO,kBAAkB,GAAG;AAAA,UAC5B,MAAM,qBAAqB,GAAG;AAAA,UAC9B,KAAK,oBAAoB,GAAG;AAAA,UAC5B,cAAc,iBAAiB,GAAG;AAAA,UAClC,WAAW,kBAAkB,GAAG;AAAA,QACjC;AAAA,MACT,CAAO;AAAA,IACP,CAAK;AACD,QAAI,iBAAiB;AACrB,QAAI,+BAA+B,CAAE;AACrC,QAAI,CAAC,QAAQ,UAAU;AACrB,aAAO,2BAA2B,MAAM;AACtC,uCAA+B;AAAA,UAC7B;AAAA,UACA,CAAC,QAAQ,aAAa,QAAQ;AAC5B,gBAAI,OAAO,YAAY,YAAY,UAAU;AAC3C,oBAAM,WAAW,YAAY,QAAQ,WAAW,CAAC;AACjD,oBAAM,eAAe,yBAAyB,QAAQ;AACtD,+BAAiB,QAAQ,cAAc,mBAAmB,GAAG,CAAC;AAAA,YAC/D,WAAU,UAAU,YAAY,gBAAgB,GAAG;AAClD,kBAAI;AACJ,sBAAQ,YAAY,kBAAkB,CAAC,cAAc;AACnD,sBAAM,WAAW,OAAO,cAAc,WAAW,UAAU,WAAW,CAAC,IAAI;AAC3E,sBAAM,mBAAmB,yBAAyB,QAAQ;AAK1D,oBAAI,qBAAqB,kBAAkB;AACzC,qCAAmB;AACnB,mCAAiB,QAAQ,kBAAkB,mBAAmB,GAAG,CAAC;AAAA,gBACnE;AAAA,cACjB,CAAe;AAAA,YACF,WAAU,WAAW,YAAY,OAAO,GAAG;AAC1C,kBAAI,YAAY,QAAQ,SAAS;AAC/B,iCAAiB;AACjB,oBAAI,QAAQ,qBAAqB;AAC/B;AAAA,oBACE,GAAG,mDACwB,YAAY,QAAQ,SAAQ;AAAA;AAAA;AAAA;AAAA,kBAIxD;AAAA,gBACF;AAAA,cACjB,OAAqB;AACL,sBAAM,iBAAiB,8BAA8B,YAAY,SAAS,QAAQ,mBAAmB;AAIrG,oBAAI,QAAQ,cAAc,GAAG;AAI3B,mCAAiB;AAAA,gBAClB;AACD,wBAAQ,gBAAgB,CAAC,SAAS;AAChC,mCAAiB,QAAQ,MAAM,mBAAmB,GAAG,CAAC;AAAA,gBACxE,CAAiB;AAAA,cACF;AAAA,YACf,OAAmB;AACL,kBAAI,QAAQ,qBAAqB;AAC/B;AAAA,kBACE,GAAG,2CACgB,YAAY;AAAA;AAAA;AAAA,gBAGhC;AAAA,cACF;AACD,+BAAiB;AAAA,YAClB;AACD,mBAAO;AAAA,UACR;AAAA,UACD,CAAE;AAAA,QACH;AAAA,MACT,CAAO;AAAA,IACF;AACD,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EACF;AACD,WAAS,iBAAiB,YAAY,iBAAiB;AACrD,QAAI,SAAS,CAAE;AACf,UAAM,gBAAgB,oBAAoB,UAAU;AACpD,aAAS,OAAO,OAAO,cAAc,MAAM;AAC3C,UAAM,gBAAgB,oBAAoB,cAAc,KAAK;AAC7D,UAAM,kBAAkB,cAAc;AACtC,aAAS,OAAO,OAAO,cAAc,MAAM;AAC3C,aAAS,OAAO,OAAO,sBAAsB,eAAe,CAAC;AAC7D,aAAS,OAAO,OAAO,qBAAqB,eAAe,CAAC;AAC5D,aAAS,OAAO,OAAO,wBAAwB,iBAAiB,eAAe,CAAC;AAChF,aAAS,OAAO,OAAO,wBAAwB,eAAe,CAAC;AAC/D,WAAO;AAAA,EACR;AACD,WAAS,sBAAsB,YAAY;AACzC,QAAI,SAAS,CAAE;AACf,UAAM,qBAAqB,OAAO,YAAY,CAAC,gBAAgB,WAAW,YAAY,OAAO,CAAC,CAAC;AAC/F,aAAS,OAAO,OAAO,qBAAqB,kBAAkB,CAAC;AAC/D,aAAS,OAAO,OAAO,uBAAuB,kBAAkB,CAAC;AACjE,aAAS,OAAO,OAAO,qBAAqB,kBAAkB,CAAC;AAC/D,aAAS,OAAO,OAAO,sBAAsB,kBAAkB,CAAC;AAChE,aAAS,OAAO,OAAO,sBAAsB,kBAAkB,CAAC;AAChE,WAAO;AAAA,EACR;AACD,WAAS,oBAAoB,YAAY;AACvC,UAAM,+BAA+B,OAAO,YAAY,CAAC,aAAa;AACpE,aAAO,CAAC,IAAI,UAAU,OAAO;AAAA,IACnC,CAAK;AACD,UAAM,SAAS,IAAI,8BAA8B,CAAC,aAAa;AAC7D,aAAO;AAAA,QACL,SAAS,mBAAmB,SAAS,OAAO;AAAA,QAC5C,MAAM,yBAAyB;AAAA,QAC/B,YAAY,CAAC,QAAQ;AAAA,MACtB;AAAA,IACP,CAAK;AACD,UAAM,QAAQ,aAAa,YAAY,4BAA4B;AACnE,WAAO,EAAE,QAAQ,MAAO;AAAA,EACzB;AACD,WAAS,oBAAoB,YAAY;AACvC,UAAM,+BAA+B,OAAO,YAAY,CAAC,aAAa;AACpE,YAAM,UAAU,SAAS,OAAO;AAChC,aAAO,CAAC,WAAW,OAAO,KAAK,CAAC,WAAW,OAAO,KAAK,CAAC,IAAI,SAAS,MAAM,KAAK,CAAC,SAAS,OAAO;AAAA,IACvG,CAAK;AACD,UAAM,SAAS,IAAI,8BAA8B,CAAC,aAAa;AAC7D,aAAO;AAAA,QACL,SACE,mBACA,SAAS,OACT;AAAA,QAEF,MAAM,yBAAyB;AAAA,QAC/B,YAAY,CAAC,QAAQ;AAAA,MACtB;AAAA,IACP,CAAK;AACD,UAAM,QAAQ,aAAa,YAAY,4BAA4B;AACnE,WAAO,EAAE,QAAQ,MAAO;AAAA,EACzB;AACD,QAAM,eAAe;AACrB,WAAS,qBAAqB,YAAY;AACxC,UAAM,wBAAwB,kBAAkB;AAAA,MAC9C,cAAc;AACZ,cAAM,GAAG,SAAS;AAClB,aAAK,QAAQ;AAAA,MACd;AAAA,MACD,eAAe,MAAM;AACnB,aAAK,QAAQ;AAAA,MACd;AAAA,IACF;AACD,UAAM,eAAe,OAAO,YAAY,CAAC,aAAa;AACpD,YAAM,UAAU,SAAS;AACzB,UAAI;AACF,cAAM,YAAY,aAAa,OAAO;AACtC,cAAM,mBAAmB,IAAI,gBAAiB;AAC9C,yBAAiB,MAAM,SAAS;AAChC,eAAO,iBAAiB;AAAA,MACzB,SAAQ,GAAP;AAGA,eAAO,aAAa,KAAK,QAAQ,MAAM;AAAA,MACxC;AAAA,IACP,CAAK;AACD,UAAM,SAAS,IAAI,cAAc,CAAC,aAAa;AAC7C,aAAO;AAAA,QACL,SACE,qDAEA,SAAS,OACT;AAAA,QAGF,MAAM,yBAAyB;AAAA,QAC/B,YAAY,CAAC,QAAQ;AAAA,MACtB;AAAA,IACP,CAAK;AACD,WAAO;AAAA,EACR;AACD,WAAS,sBAAsB,YAAY;AACzC,UAAM,qBAAqB,OAAO,YAAY,CAAC,aAAa;AAC1D,YAAM,UAAU,SAAS;AACzB,aAAO,QAAQ,KAAK,EAAE;AAAA,IAC5B,CAAK;AACD,UAAM,SAAS,IAAI,oBAAoB,CAAC,aAAa;AACnD,aAAO;AAAA,QACL,SAAS,mBAAmB,SAAS,OAAO;AAAA,QAC5C,MAAM,yBAAyB;AAAA,QAC/B,YAAY,CAAC,QAAQ;AAAA,MACtB;AAAA,IACP,CAAK;AACD,WAAO;AAAA,EACR;AACD,QAAM,iBAAiB;AACvB,WAAS,uBAAuB,YAAY;AAC1C,UAAM,0BAA0B,kBAAkB;AAAA,MAChD,cAAc;AACZ,cAAM,GAAG,SAAS;AAClB,aAAK,QAAQ;AAAA,MACd;AAAA,MACD,iBAAiB,MAAM;AACrB,aAAK,QAAQ;AAAA,MACd;AAAA,IACF;AACD,UAAM,eAAe,OAAO,YAAY,CAAC,aAAa;AACpD,YAAM,UAAU,SAAS;AACzB,UAAI;AACF,cAAM,YAAY,aAAa,OAAO;AACtC,cAAM,qBAAqB,IAAI,kBAAmB;AAClD,2BAAmB,MAAM,SAAS;AAClC,eAAO,mBAAmB;AAAA,MAC3B,SAAQ,GAAP;AAGA,eAAO,eAAe,KAAK,QAAQ,MAAM;AAAA,MAC1C;AAAA,IACP,CAAK;AACD,UAAM,SAAS,IAAI,cAAc,CAAC,aAAa;AAC7C,aAAO;AAAA,QACL,SACE,qDAEA,SAAS,OACT;AAAA,QAGF,MAAM,yBAAyB;AAAA,QAC/B,YAAY,CAAC,QAAQ;AAAA,MACtB;AAAA,IACP,CAAK;AACD,WAAO;AAAA,EACR;AACD,WAAS,qBAAqB,YAAY;AACxC,UAAM,eAAe,OAAO,YAAY,CAAC,aAAa;AACpD,YAAM,UAAU,SAAS,OAAO;AAChC,aAAO,mBAAmB,WAAW,QAAQ,aAAa,QAAQ;AAAA,IACxE,CAAK;AACD,UAAM,SAAS,IAAI,cAAc,CAAC,aAAa;AAC7C,aAAO;AAAA,QACL,SAAS,mBAAmB,SAAS,OAAO;AAAA,QAC5C,MAAM,yBAAyB;AAAA,QAC/B,YAAY,CAAC,QAAQ;AAAA,MACtB;AAAA,IACP,CAAK;AACD,WAAO;AAAA,EACR;AAED,WAAS,sBAAsB,YAAY;AACzC,UAAM,QAAQ,CAAE;AAChB,QAAI,oBAAoB,IAAI,YAAY,CAAC,cAAc;AACrD,aAAO;AAAA,QACL;AAAA,QACA,CAAC,QAAQ,cAAc;AACrB,cACE,UAAU,QAAQ,WAAW,UAAU,QAAQ,UAC/C,CAAC,SAAS,OAAO,SAAS,KAC1B,UAAU,YAAYA,OAAM,IAC5B;AAGA,kBAAM,KAAK,SAAS;AACpB,mBAAO,KAAK,SAAS;AACrB,mBAAO;AAAA,UACR;AACD,iBAAO;AAAA,QACR;AAAA,QACD,CAAE;AAAA,MACH;AAAA,IACP,CAAK;AACD,wBAAoB,QAAQ,iBAAiB;AAC7C,UAAM,oBAAoB,OAAO,mBAAmB,CAAC,qBAAqB;AACxE,aAAO,iBAAiB,SAAS;AAAA,IACvC,CAAK;AACD,UAAM,SAAS,IAAI,mBAAmB,CAAC,mBAAmB;AACxD,YAAM,iBAAiB,IAAI,gBAAgB,CAAC,aAAa;AACvD,eAAO,SAAS;AAAA,MACxB,CAAO;AACD,YAAM,gBAAgB,KAAK,cAAc,EAAE;AAC3C,aAAO;AAAA,QACL,SACE,6BAA6B,qEACyB,eAAe,KAAK,IAAI;AAAA,QAChF,MAAM,yBAAyB;AAAA,QAC/B,YAAY;AAAA,MACb;AAAA,IACP,CAAK;AACD,WAAO;AAAA,EACR;AACD,WAAS,qBAAqB,YAAY;AACxC,UAAM,eAAe,OAAO,YAAY,CAAC,UAAU;AACjD,UAAI,CAAC,IAAI,OAAO,OAAO,GAAG;AACxB,eAAO;AAAA,MACR;AACD,YAAM,QAAQ,MAAM;AACpB,aAAO,UAAUA,OAAM,WAAW,UAAUA,OAAM,MAAM,CAAC,SAAS,KAAK;AAAA,IAC7E,CAAK;AACD,UAAM,SAAS,IAAI,cAAc,CAAC,aAAa;AAC7C,aAAO;AAAA,QACL,SAAS,mBAAmB,SAAS,OAAO;AAAA,QAC5C,MAAM,yBAAyB;AAAA,QAC/B,YAAY,CAAC,QAAQ;AAAA,MACtB;AAAA,IACP,CAAK;AACD,WAAO;AAAA,EACR;AACD,WAAS,wBAAwB,YAAY,YAAY;AACvD,UAAM,eAAe,OAAO,YAAY,CAAC,UAAU;AACjD,aAAO,MAAM,cAAc,UAAa,CAAC,SAAS,YAAY,MAAM,SAAS;AAAA,IACnF,CAAK;AACD,UAAM,SAAS,IAAI,cAAc,CAAC,YAAY;AAC5C,YAAM,MACJ,iBAAiB,QAAQ,kEAAkE,QAAQ;AAErG,aAAO;AAAA,QACL,SAAS;AAAA,QACT,MAAM,yBAAyB;AAAA,QAC/B,YAAY,CAAC,OAAO;AAAA,MACrB;AAAA,IACP,CAAK;AACD,WAAO;AAAA,EACR;AACD,WAAS,wBAAwB,YAAY;AAC3C,UAAM,SAAS,CAAE;AACjB,UAAM,cAAc;AAAA,MAClB;AAAA,MACA,CAAC,QAAQ,SAAS,QAAQ;AACxB,cAAM,UAAU,QAAQ;AACxB,YAAI,YAAYA,OAAM,IAAI;AACxB,iBAAO;AAAA,QACR;AAGD,YAAI,SAAS,OAAO,GAAG;AACrB,iBAAO,KAAK,EAAE,KAAK,SAAS,KAAK,WAAW,SAAS;AAAA,QACtD,WAAU,WAAW,OAAO,KAAK,WAAW,OAAO,GAAG;AACrD,iBAAO,KAAK,EAAE,KAAK,QAAQ,QAAQ,KAAK,WAAW,SAAS;AAAA,QAC7D;AACD,eAAO;AAAA,MACR;AAAA,MACD,CAAE;AAAA,IACH;AACD,YAAQ,YAAY,CAAC,SAAS,YAAY;AACxC,cAAQ,aAAa,CAAC,EAAE,KAAK,KAAK,UAAS,MAAO;AAChD,YAAI,UAAU,OAAO,cAAc,KAAK,QAAQ,OAAO,GAAG;AACxD,gBAAM,MACJ,YAAY,UAAU;AAAA,4CACuB,QAAQ;AAAA;AAGvD,iBAAO,KAAK;AAAA,YACV,SAAS;AAAA,YACT,MAAM,yBAAyB;AAAA,YAC/B,YAAY,CAAC,SAAS,SAAS;AAAA,UAC3C,CAAW;AAAA,QACF;AAAA,MACT,CAAO;AAAA,IACP,CAAK;AACD,WAAO;AAAA,EACR;AACD,WAAS,cAAc,KAAK,SAAS;AAEnC,QAAI,WAAW,OAAO,GAAG;AACvB,YAAM,cAAc,QAAQ,KAAK,GAAG;AACpC,aAAO,gBAAgB,QAAQ,YAAY,UAAU;AAAA,IAC3D,WAAe,WAAW,OAAO,GAAG;AAE9B,aAAO,QAAQ,KAAK,GAAG,CAAA,GAAI,CAAA,CAAE;AAAA,IAC9B,WAAU,IAAI,SAAS,MAAM,GAAG;AAE/B,aAAO,QAAQ,KAAK,KAAK,GAAG,CAAA,GAAI,CAAA,CAAE;AAAA,IACxC,WAAe,OAAO,YAAY,UAAU;AACtC,aAAO,YAAY;AAAA,IACzB,OAAW;AACL,YAAM,MAAM,sBAAsB;AAAA,IACnC;AAAA,EACF;AACD,WAAS,WAAW,QAAQ;AAE1B,UAAM,YAAY,CAAC,KAAK,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AACnF,WAAO,OAAO,WAAW,CAAC,SAAS,OAAO,OAAO,QAAQ,IAAI,MAAM,EAAE,MAAM;AAAA,EAC5E;AACD,WAAS,gBAAgB,SAAS;AAChC,UAAM,QAAQ,QAAQ,aAAa,MAAM;AAGzC,WAAO,IAAI,OAAO,OAAO,QAAQ,WAAW,KAAK;AAAA,EAClD;AACD,WAAS,cAAc,SAAS;AAC9B,UAAM,QAAQ,QAAQ,aAAa,OAAO;AAG1C,WAAO,IAAI,OAAO,GAAG,QAAQ,UAAU,KAAK;AAAA,EAC7C;AACD,WAAS,qBAAqB,iBAAiB,YAAY,0BAA0B;AACnF,UAAM,SAAS,CAAE;AAEjB,QAAI,CAAC,IAAI,iBAAiB,YAAY,GAAG;AACvC,aAAO,KAAK;AAAA,QACV,SACE,wDAAwD,eAAe;AAAA,QACzE,MAAM,yBAAyB;AAAA,MACvC,CAAO;AAAA,IACF;AACD,QAAI,CAAC,IAAI,iBAAiB,KAAK,GAAG;AAChC,aAAO,KAAK;AAAA,QACV,SAAS,wDAAwD,QAAQ;AAAA,QACzE,MAAM,yBAAyB;AAAA,MACvC,CAAO;AAAA,IACF;AACD,QACE,IAAI,iBAAiB,KAAK,KAC1B,IAAI,iBAAiB,YAAY,KACjC,CAAC,IAAI,gBAAgB,OAAO,gBAAgB,WAAW,GACvD;AACA,aAAO,KAAK;AAAA,QACV,SACE,kDAAkD,kBAAkB,gBAAgB;AAAA;AAAA,QAEtF,MAAM,yBAAyB;AAAA,MACvC,CAAO;AAAA,IACF;AACD,QAAI,IAAI,iBAAiB,KAAK,GAAG;AAC/B,cAAQ,gBAAgB,OAAO,CAAC,eAAe,iBAAiB;AAC9D,gBAAQ,eAAe,CAAC,aAAa,YAAY;AAC/C,cAAI,YAAY,WAAW,GAAG;AAC5B,mBAAO,KAAK;AAAA,cACV,SACE,sEACI,4BAA4B;AAAA;AAAA,cAClC,MAAM,yBAAyB;AAAA,YAC7C,CAAa;AAAA,UACF,WAAU,IAAI,aAAa,YAAY,GAAG;AACzC,kBAAM,YAAY,UAAU,YAAY,UAAU,IAAI,YAAY,aAAa,CAAC,YAAY,UAAU;AACtG,oBAAQ,WAAW,CAAC,kBAAkB;AACpC,kBAAI,CAAC,YAAY,aAAa,KAAK,CAAC,SAAS,eAAe,aAAa,GAAG;AAC1E,uBAAO,KAAK;AAAA,kBACV,SAAS,8DAA8D,cAAc,mBAAmB,YAAY,0BAA0B;AAAA;AAAA,kBAC9I,MAAM,yBAAyB;AAAA,gBACjD,CAAiB;AAAA,cACF;AAAA,YACf,CAAa;AAAA,UACF;AAAA,QACX,CAAS;AAAA,MACT,CAAO;AAAA,IACF;AACD,WAAO;AAAA,EACR;AACD,WAAS,4BAA4B,iBAAiB,YAAY,0BAA0B;AAC1F,UAAM,WAAW,CAAE;AACnB,QAAI,kBAAkB;AACtB,UAAM,gBAAgB,QAAQ,QAAQ,OAAO,gBAAgB,KAAK,CAAC,CAAC;AACpE,UAAM,qBAAqB,OAAO,eAAe,CAAC,aAAa,SAAS,OAAO,MAAMA,OAAM,EAAE;AAC7F,UAAM,sBAAsB,aAAa,wBAAwB;AACjE,QAAI,YAAY;AACd,cAAQ,oBAAoB,CAAC,YAAY;AACvC,cAAM,YAAY,sBAAsB,SAAS,mBAAmB;AACpE,YAAI,cAAc,OAAO;AACvB,gBAAM,UAAU,2BAA2B,SAAS,SAAS;AAC7D,gBAAM,oBAAoB;AAAA,YACxB;AAAA,YACA,MAAM,UAAU;AAAA,YAChB,WAAW;AAAA,UACZ;AACD,mBAAS,KAAK,iBAAiB;AAAA,QACzC,OAAe;AAEL,cAAI,IAAI,SAAS,aAAa,GAAG;AAC/B,gBAAI,QAAQ,gBAAgB,MAAM;AAChC,gCAAkB;AAAA,YACnB;AAAA,UACb,OAAiB;AACL,gBAAI,iBAAiB,qBAAqB,QAAQ,OAAO,GAAG;AAC1D,gCAAkB;AAAA,YACnB;AAAA,UACF;AAAA,QACF;AAAA,MACT,CAAO;AAAA,IACF;AACD,QAAI,cAAc,CAAC,iBAAiB;AAClC,eAAS,KAAK;AAAA,QACZ,SACE;AAAA,QAKF,MAAM,yBAAyB;AAAA,MACvC,CAAO;AAAA,IACF;AACD,WAAO;AAAA,EACR;AACD,WAAS,iBAAiB,aAAa;AACrC,UAAM,eAAe,CAAE;AACvB,UAAM,YAAY,KAAK,WAAW;AAClC,YAAQ,WAAW,CAAC,YAAY;AAC9B,YAAM,iBAAiB,YAAY,OAAO;AAE1C,UAAI,UAAU,cAAc,GAAG;AAC7B,qBAAa,OAAO,IAAI,CAAE;AAAA,MAClC,OAAa;AACL,cAAM,MAAM,sBAAsB;AAAA,MACnC;AAAA,IACP,CAAK;AACD,WAAO;AAAA,EACR;AAED,WAAS,gBAAgB,WAAW;AAClC,UAAM,UAAU,UAAU;AAE1B,QAAI,WAAW,OAAO,GAAG;AACvB,aAAO;AAAA,IACb,WAAe,WAAW,OAAO,GAAG;AAE9B,aAAO;AAAA,IACR,WAAU,IAAI,SAAS,MAAM,GAAG;AAE/B,aAAO;AAAA,IACb,WAAe,SAAS,OAAO,GAAG;AAC5B,aAAO;AAAA,IACb,OAAW;AACL,YAAM,MAAM,sBAAsB;AAAA,IACnC;AAAA,EACF;AACD,WAAS,eAAe,SAAS;AAC/B,QAAI,SAAS,OAAO,KAAK,QAAQ,WAAW,GAAG;AAC7C,aAAO,QAAQ,WAAW,CAAC;AAAA,IACjC,OAAW;AACL,aAAO;AAAA,IACR;AAAA,EACF;AAID,QAAM,gCAAgC;AAAA;AAAA,IAEpC,MAAM,SAAU,MAAM;AACpB,YAAM,MAAM,KAAK;AACjB,eAAS,IAAI,KAAK,WAAW,IAAI,KAAK,KAAK;AACzC,cAAM,IAAI,KAAK,WAAW,CAAC;AAC3B,YAAI,MAAM,IAAI;AACZ,eAAK,YAAY,IAAI;AACrB,iBAAO;AAAA,QACjB,WAAmB,MAAM,IAAI;AACnB,cAAI,KAAK,WAAW,IAAI,CAAC,MAAM,IAAI;AACjC,iBAAK,YAAY,IAAI;AAAA,UACjC,OAAiB;AACL,iBAAK,YAAY,IAAI;AAAA,UACtB;AACD,iBAAO;AAAA,QACR;AAAA,MACF;AACD,aAAO;AAAA,IACR;AAAA,IACD,WAAW;AAAA,EACZ;AACD,WAAS,sBAAsB,SAAS,yBAAyB;AAC/D,QAAI,IAAI,SAAS,aAAa,GAAG;AAG/B,aAAO;AAAA,IACb,OAAW;AAEL,UAAI,WAAW,QAAQ,OAAO,GAAG;AAC/B,YAAI;AAEF,2BAAiB,yBAAyB,QAAQ,OAAO;AAAA,QAC1D,SAAQ,GAAP;AAEA,iBAAO;AAAA,YACL,OAAO,yBAAyB;AAAA,YAChC,QAAQ,EAAE;AAAA,UACX;AAAA,QACF;AACD,eAAO;AAAA,MACR,WAAU,SAAS,QAAQ,OAAO,GAAG;AAEpC,eAAO;AAAA,MACf,WAAiB,gBAAgB,OAAO,GAAG;AAEnC,eAAO,EAAE,OAAO,yBAAyB,kBAAmB;AAAA,MACpE,OAAa;AACL,cAAM,MAAM,sBAAsB;AAAA,MACnC;AAAA,IACF;AAAA,EACF;AACD,WAAS,2BAA2B,SAAS,SAAS;AAEpD,QAAI,QAAQ,UAAU,yBAAyB,qBAAqB;AAClE,aACE;AAAA,0BAC4B,QAAQ;AAAA,gBAClB,QAAQ;AAAA;AAAA,IAG7B,WAAU,QAAQ,UAAU,yBAAyB,mBAAmB;AACvE,aACE;AAAA,0BAC4B,QAAQ;AAAA;AAAA,IAG5C,OAAW;AACL,YAAM,MAAM,sBAAsB;AAAA,IACnC;AAAA,EACF;AACD,WAAS,aAAa,cAAc;AAClC,UAAM,YAAY,IAAI,cAAc,CAAC,gBAAgB;AACnD,UAAI,SAAS,WAAW,GAAG;AACzB,eAAO,YAAY,WAAW,CAAC;AAAA,MACvC,OAAa;AACL,eAAO;AAAA,MACR;AAAA,IACP,CAAK;AACD,WAAO;AAAA,EACR;AACD,WAAS,iBAAiBN,MAAK,KAAK,OAAO;AACzC,QAAIA,KAAI,GAAG,MAAM,QAAW;AAC1B,MAAAA,KAAI,GAAG,IAAI,CAAC,KAAK;AAAA,IACvB,OAAW;AACL,MAAAA,KAAI,GAAG,EAAE,KAAK,KAAK;AAAA,IACpB;AAAA,EACF;AACD,QAAM,qBAAqB;AAgB3B,MAAI,4BAA4B,CAAE;AAClC,WAAS,yBAAyB,UAAU;AAC1C,WAAO,WAAW,qBAAqB,WAAW,0BAA0B,QAAQ;AAAA,EACrF;AASD,WAAS,kCAAkC;AACzC,QAAI,QAAQ,yBAAyB,GAAG;AACtC,kCAA4B,IAAI,MAAM,KAAK;AAC3C,eAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC9B,kCAA0B,CAAC,IAAI,IAAI,MAAM,MAAM,CAAC,EAAE,IAAI,OAAO;AAAA,MAC9D;AAAA,IACF;AAAA,EACF;AAED,WAAS,uBAAuB,aAAa,gBAAgB;AAC3D,UAAM,eAAe,YAAY;AACjC,QAAI,iBAAiB,eAAe,cAAc;AAChD,aAAO;AAAA,IACb,OAAW;AACL,aAAO,eAAe,aAAa,QAAQ,eAAe,mBAAmB,YAAY,MAAM;AAAA,IAChG;AAAA,EACF;AAGD,WAAS,mCAAmC,OAAO,SAAS;AAC1D,WAAO,MAAM,iBAAiB,QAAQ;AAAA,EACvC;AACD,MAAI,oBAAoB;AACxB,QAAM,kBAAkB,CAAE;AAC1B,WAAS,kBAAkB,YAAY;AAErC,UAAM,uBAAuB,iBAAiB,UAAU;AAExD,4BAAwB,oBAAoB;AAE5C,4BAAwB,oBAAoB;AAC5C,+BAA2B,oBAAoB;AAC/C,YAAQ,sBAAsB,CAAC,YAAY;AACzC,cAAQ,WAAW,QAAQ,gBAAgB,SAAS;AAAA,IAC1D,CAAK;AAAA,EACF;AACD,WAAS,iBAAiB,YAAY;AACpC,QAAI,SAAS,MAAM,UAAU;AAC7B,QAAI,aAAa;AACjB,QAAI,YAAY;AAChB,WAAO,WAAW;AAChB,mBAAa,QAAQ,QAAQ,IAAI,YAAY,CAAC,gBAAgB,YAAY,UAAU,CAAC,CAAC;AACtF,YAAM,gBAAgB,aAAa,YAAY,MAAM;AACrD,eAAS,OAAO,OAAO,aAAa;AACpC,UAAI,QAAQ,aAAa,GAAG;AAC1B,oBAAY;AAAA,MACpB,OAAa;AACL,qBAAa;AAAA,MACd;AAAA,IACF;AACD,WAAO;AAAA,EACR;AACD,WAAS,wBAAwB,YAAY;AAC3C,YAAQ,YAAY,CAAC,gBAAgB;AACnC,UAAI,CAAC,oBAAoB,WAAW,GAAG;AACrC,wBAAgB,iBAAiB,IAAI;AACrC,oBAAY,eAAe;AAAA,MAC5B;AAED,UACE,sBAAsB,WAAW,KACjC,CAAC,UAAU,YAAY,UAAU,GAGjC;AACA,oBAAY,aAAa,CAAC,YAAY,UAAU;AAAA,MACjD;AACD,UAAI,CAAC,sBAAsB,WAAW,GAAG;AACvC,oBAAY,aAAa,CAAE;AAAA,MAC5B;AACD,UAAI,CAAC,gCAAgC,WAAW,GAAG;AACjD,oBAAY,kBAAkB,CAAE;AAAA,MACjC;AACD,UAAI,CAAC,mCAAmC,WAAW,GAAG;AACpD,oBAAY,qBAAqB,CAAE;AAAA,MACpC;AAAA,IACP,CAAK;AAAA,EACF;AACD,WAAS,2BAA2B,YAAY;AAC9C,YAAQ,YAAY,CAAC,gBAAgB;AAEnC,kBAAY,kBAAkB,CAAE;AAChC,cAAQ,YAAY,oBAAoB,CAAC,KAAK,QAAQ;AACpD,oBAAY,gBAAgB,KAAK,gBAAgB,GAAG,EAAE,YAAY;AAAA,MAC1E,CAAO;AAAA,IACP,CAAK;AAAA,EACF;AACD,WAAS,wBAAwB,YAAY;AAC3C,YAAQ,YAAY,CAAC,gBAAgB;AACnC,oCAA8B,CAAE,GAAE,WAAW;AAAA,IACnD,CAAK;AAAA,EACF;AACD,WAAS,8BAA8B,MAAM,UAAU;AACrD,YAAQ,MAAM,CAAC,aAAa;AAC1B,eAAS,mBAAmB,SAAS,YAAY,IAAI;AAAA,IAC3D,CAAK;AACD,YAAQ,SAAS,YAAY,CAAC,iBAAiB;AAC7C,YAAM,UAAU,KAAK,OAAO,QAAQ;AAEpC,UAAI,CAAC,SAAS,SAAS,YAAY,GAAG;AACpC,sCAA8B,SAAS,YAAY;AAAA,MACpD;AAAA,IACP,CAAK;AAAA,EACF;AACD,WAAS,oBAAoB,SAAS;AACpC,WAAO,IAAI,SAAS,cAAc;AAAA,EACnC;AACD,WAAS,sBAAsB,SAAS;AACtC,WAAO,IAAI,SAAS,YAAY;AAAA,EACjC;AACD,WAAS,gCAAgC,SAAS;AAChD,WAAO,IAAI,SAAS,iBAAiB;AAAA,EACtC;AACD,WAAS,mCAAmC,SAAS;AACnD,WAAO,IAAI,SAAS,oBAAoB;AAAA,EACzC;AACD,WAAS,YAAY,SAAS;AAC5B,WAAO,IAAI,SAAS,cAAc;AAAA,EACnC;AAED,QAAM,4BAA4B;AAAA,IAChC,iCAAiC,OAAO;AACtC,aAAO,uDAAuD,MAAM;AAAA,IACrE;AAAA,IACD,iCAAiC,UAAU,aAAa,QAAQ,MAAM,QAAQ;AAC5E,aACE,2BAA2B,SAAS,OAAO,WAAW,kBAAkB,wBAC5D;AAAA,IAEf;AAAA,EACF;AAED,MAAI;AACH,GAAC,SAAUO,2BAA0B;AACpC,IAAAA,0BAA0BA,0BAAyB,iBAAiB,IAAI,CAAG,IAAG;AAC9E,IAAAA,0BAA0BA,0BAAyB,iBAAiB,IAAI,CAAG,IAAG;AAC9E,IAAAA,0BAA0BA,0BAAyB,kBAAkB,IAAI,CAAG,IAAG;AAC/E,IAAAA,0BAA0BA,0BAAyB,yBAAyB,IAAI,CAAG,IAAG;AACtF,IAAAA,0BAA0BA,0BAAyB,0BAA0B,IAAI,CAAG,IAAG;AACvF,IAAAA,0BAA0BA,0BAAyB,0BAA0B,IAAI,CAAG,IAAG;AACvF,IAAAA,0BAA0BA,0BAAyB,0BAA0B,IAAI,CAAG,IAAG;AACvF,IAAAA,0BAA0BA,0BAAyB,uCAAuC,IAAI,CAAG,IAC/F;AACF,IAAAA,0BAA0BA,0BAAyB,yCAAyC,IAAI,CAAG,IACjG;AACF,IAAAA,0BAA0BA,0BAAyB,oDAAoD,IAAI,CAAG,IAC5G;AACF,IAAAA,0BAA0BA,0BAAyB,2CAA2C,IAAI,EAAI,IACpG;AACF,IAAAA,0BAA0BA,0BAAyB,kBAAkB,IAAI,EAAI,IAAG;AAChF,IAAAA,0BAA0BA,0BAAyB,qBAAqB,IAAI,EAAI,IAAG;AACnF,IAAAA,0BAA0BA,0BAAyB,sBAAsB,IAAI,EAAI,IAAG;AACpF,IAAAA,0BAA0BA,0BAAyB,qBAAqB,IAAI,EAAI,IAAG;AACnF,IAAAA,0BAA0BA,0BAAyB,qBAAqB,IAAI,EAAI,IAAG;AACnF,IAAAA,0BAA0BA,0BAAyB,mBAAmB,IAAI,EAAI,IAAG;AACjF,IAAAA,0BAA0BA,0BAAyB,iDAAiD,IAAI,EAAI,IAC1G;AAAA,EACN,GAAK,6BAA6B,2BAA2B,CAAA,EAAG;AAC9D,QAAM,uBAAuB;AAAA,IAC3B,+BAA+B;AAAA,IAC/B,kBAAkB;AAAA,IAClB,wBAAwB;AAAA,IACxB,0BAA0B,CAAC,MAAM,IAAI;AAAA,IACrC,qBAAqB;AAAA,IACrB,UAAU;AAAA,IACV,sBAAsB;AAAA,IACtB,eAAe;AAAA,IACf,iBAAiB;AAAA,IACjB,iBAAiB;AAAA,EAClB;AACD,SAAO,OAAO,oBAAoB;AAClC,QAAMD,OAAM;AAAA,IACV,YAAY,iBAAiB,SAAS,sBAAsB;AAC1D,WAAK,kBAAkB;AACvB,WAAK,wBAAwB,CAAE;AAC/B,WAAK,yBAAyB,CAAE;AAChC,WAAK,qBAAqB,CAAE;AAC5B,WAAK,+BAA+B,CAAE;AACtC,WAAK,QAAQ,CAAE;AACf,WAAK,cAAc,CAAE;AACrB,WAAK,kBAAkB;AACvB,WAAK,gBAAgB;AACrB,WAAK,YAAY;AACjB,WAAK,qBAAqB,CAAE;AAG5B,WAAK,aAAa,CAAC,WAAW,cAAc;AAG1C,YAAI,KAAK,kBAAkB,MAAM;AAC/B,eAAK;AACL,gBAAM,SAAS,IAAI,MAAM,KAAK,kBAAkB,CAAC,EAAE,KAAK,GAAI;AAC5D,cAAI,KAAK,kBAAkB,KAAK,mBAAmB;AACjD,oBAAQ,IAAI,GAAG,cAAc,YAAY;AAAA,UAC1C;AACD,gBAAM,EAAE,MAAM,UAAU,MAAM,SAAS;AAEvC,gBAAM,cAAc,OAAO,KAAK,QAAQ,OAAO,QAAQ;AACvD,cAAI,KAAK,kBAAkB,KAAK,mBAAmB;AACjD,wBAAY,GAAG,cAAc,oBAAoB,QAAQ;AAAA,UAC1D;AACD,eAAK;AACL,iBAAO;AAAA,QACjB,OAAe;AACL,iBAAO,UAAW;AAAA,QACnB;AAAA,MACF;AACD,UAAI,OAAO,WAAW,WAAW;AAC/B,cAAM;AAAA,UACJ;AAAA,QAED;AAAA,MACF;AAED,WAAK,SAAS,SAAS,CAAA,GAAI,sBAAsB,MAAM;AACvD,YAAM,eAAe,KAAK,OAAO;AACjC,UAAI,iBAAiB,MAAM;AACzB,aAAK,oBAAoB;AACzB,aAAK,gBAAgB;AAAA,MAC7B,WAAiB,OAAO,iBAAiB,UAAU;AAC3C,aAAK,oBAAoB;AACzB,aAAK,gBAAgB;AAAA,MACtB;AACD,WAAK,kBAAkB;AACvB,WAAK,WAAW,qBAAqB,MAAM;AACzC,YAAI;AACJ,YAAI,oBAAoB;AACxB,aAAK,WAAW,yBAAyB,MAAM;AAC7C,cAAI,KAAK,OAAO,2BAA2B,qBAAqB,wBAAwB;AAEtF,iBAAK,OAAO,yBAAyB;AAAA,UACjD,OAAiB;AACL,gBAAI,KAAK,OAAO,6BAA6B,qBAAqB,0BAA0B;AAC1F,oBAAM;AAAA,gBACJ;AAAA,cAED;AAAA,YACF;AAAA,UACF;AACD,cAAI,OAAO,YAAY,OAAO,qBAAqB;AACjD,kBAAM,MAAM,oEAAoE;AAAA,UACjF;AACD,eAAK,kBAAkB,kBAAkB,KAAK,KAAK,OAAO,gBAAgB;AAC1E,eAAK,gBAAgB,QAAQ,KAAK,KAAK,OAAO,gBAAgB;AAE9D,cAAI,UAAU,eAAe,GAAG;AAC9B,+BAAmB;AAAA,cACjB,OAAO,EAAE,aAAa,MAAM,eAAe,EAAG;AAAA,cAC9C,aAAa;AAAA,YACd;AAAA,UACb,OAAiB;AAEL,gCAAoB;AACpB,+BAAmB,MAAM,eAAe;AAAA,UACzC;AAAA,QACX,CAAS;AACD,YAAI,KAAK,OAAO,oBAAoB,OAAO;AACzC,eAAK,WAAW,wBAAwB,MAAM;AAC5C,iBAAK,wBAAwB,KAAK,sBAAsB;AAAA,cACtD,qBAAqB,kBAAkB,KAAK,iBAAiB,KAAK,OAAO,wBAAwB;AAAA,YAClG;AAAA,UACb,CAAW;AACD,eAAK,WAAW,+BAA+B,MAAM;AACnD,iBAAK,yBAAyB,KAAK,uBAAuB;AAAA,cACxD,4BAA4B,kBAAkB,KAAK,iBAAiB,KAAK,OAAO,wBAAwB;AAAA,YACzG;AAAA,UACb,CAAW;AAAA,QACF;AAED,yBAAiB,QAAQ,iBAAiB,QAAQ,iBAAiB,QAAQ,CAAE;AAG7E,gBAAQ,iBAAiB,OAAO,CAAC,eAAe,iBAAiB;AAC/D,2BAAiB,MAAM,YAAY,IAAI,OAAO,eAAe,CAAC,gBAAgB,YAAY,WAAW,CAAC;AAAA,QAChH,CAAS;AACD,cAAM,eAAe,KAAK,iBAAiB,KAAK;AAChD,gBAAQ,iBAAiB,OAAO,CAAC,YAAY,gBAAgB;AAC3D,eAAK,WAAW,UAAU,2BAA2B,MAAM;AACzD,iBAAK,MAAM,KAAK,WAAW;AAC3B,gBAAI,KAAK,OAAO,oBAAoB,OAAO;AACzC,mBAAK,WAAW,oBAAoB,MAAM;AACxC,qBAAK,wBAAwB,KAAK,sBAAsB;AAAA,kBACtD,iBAAiB,YAAY,YAAY;AAAA,gBAC1C;AAAA,cACjB,CAAe;AAAA,YACF;AAID,gBAAI,QAAQ,KAAK,qBAAqB,GAAG;AACvC,gCAAkB,UAAU;AAC5B,kBAAI;AACJ,mBAAK,WAAW,qBAAqB,MAAM;AACzC,oCAAoB,kBAAkB,YAAY;AAAA,kBAChD,0BAA0B,KAAK,OAAO;AAAA,kBACtC,kBAAkB,OAAO;AAAA,kBACzB,qBAAqB,OAAO;AAAA,kBAC5B,UAAU,OAAO;AAAA,kBACjB,QAAQ,KAAK;AAAA,gBAC/B,CAAiB;AAAA,cACjB,CAAe;AACD,mBAAK,mBAAmB,WAAW,IAAI,kBAAkB;AACzD,mBAAK,6BAA6B,WAAW,IAAI,kBAAkB;AACnE,mBAAK,cAAc,SAAS,CAAA,GAAI,KAAK,aAAa,kBAAkB,WAAW;AAC/E,mBAAK,YAAY,kBAAkB,aAAa,KAAK;AACrD,mBAAK,mBAAmB,WAAW,IAAI,kBAAkB;AAAA,YAC1D;AAAA,UACb,CAAW;AAAA,QACX,CAAS;AACD,aAAK,cAAc,iBAAiB;AACpC,YAAI,CAAC,QAAQ,KAAK,qBAAqB,KAAK,CAAC,KAAK,OAAO,+BAA+B;AACtF,gBAAM,iBAAiB,IAAI,KAAK,uBAAuB,CAAC,UAAU;AAChE,mBAAO,MAAM;AAAA,UACzB,CAAW;AACD,gBAAM,uBAAuB,eAAe,KAAK,2BAA2B;AAC5E,gBAAM,IAAI,MAAM,8CAA8C,oBAAoB;AAAA,QACnF;AAED,gBAAQ,KAAK,wBAAwB,CAAC,sBAAsB;AAC1D,wBAAc,kBAAkB,OAAO;AAAA,QACjD,CAAS;AACD,aAAK,WAAW,wCAAwC,MAAM;AAI5D,cAAI,gBAAgB;AAClB,iBAAK,YAAY;AACjB,iBAAK,QAAQ,KAAK;AAAA,UAC9B,OAAiB;AACL,iBAAK,kBAAkB;AACvB,iBAAK,QAAQ,KAAK;AAAA,UACnB;AACD,cAAI,mBAAmB;AACrB,iBAAK,cAAc;AAAA,UACpB;AACD,cAAI,KAAK,oBAAoB,OAAO;AAClC,iBAAK,mBAAmB;AAAA,UACzB;AACD,cAAI,KAAK,kBAAkB,OAAO;AAChC,iBAAK,mCAAmC;AAAA,UACzC;AACD,cAAI,QAAQ,KAAK,KAAK,OAAO,gBAAgB,GAAG;AAC9C,iBAAK,sBAAsB,KAAK;AAAA,UAC5C,WAAqB,aAAa,KAAK,KAAK,OAAO,gBAAgB,GAAG;AAC1D,iBAAK,sBAAsB,KAAK;AAAA,UAC5C,WAAqB,cAAc,KAAK,KAAK,OAAO,gBAAgB,GAAG;AAC3D,iBAAK,sBAAsB,KAAK;AAAA,UAC5C,OAAiB;AACL,kBAAM,MAAM,8CAA8C,KAAK,OAAO,mBAAmB;AAAA,UAC1F;AACD,cAAI,KAAK,WAAW;AAClB,iBAAK,WAAW,KAAK;AACrB,iBAAK,gBAAgB,KAAK;AAAA,UACtC,OAAiB;AACL,iBAAK,WAAW,KAAK;AACrB,iBAAK,gBAAgB,KAAK;AAAA,UAC3B;AAAA,QACX,CAAS;AACD,aAAK,WAAW,gCAAgC,MAAM;AACpD,gBAAM,mBAAmB;AAAA,YACvB,KAAK;AAAA,YACL,CAAC,mBAAmB,gBAAgB,aAAa;AAC/C,kBAAI,mBAAmB,OAAO;AAC5B,kCAAkB,KAAK,QAAQ;AAAA,cAChC;AACD,qBAAO;AAAA,YACR;AAAA,YACD,CAAE;AAAA,UACH;AACD,cAAI,OAAO,uBAAuB,CAAC,QAAQ,gBAAgB,GAAG;AAC5D,kBAAM;AAAA,cACJ,kBAAkB,iBAAiB,KAAK,IAAI;AAAA;AAAA;AAAA,YAG7C;AAAA,UACF;AAAA,QACX,CAAS;AACD,aAAK,WAAW,0BAA0B,MAAM;AAC9C,iCAAwB;AAAA,QAClC,CAAS;AACD,aAAK,WAAW,oBAAoB,MAAM;AACxC,2BAAiB,IAAI;AAAA,QAC/B,CAAS;AAAA,MACT,CAAO;AAAA,IACF;AAAA,IACD,SAAS,MAAM,cAAc,KAAK,aAAa;AAC7C,UAAI,CAAC,QAAQ,KAAK,qBAAqB,GAAG;AACxC,cAAM,iBAAiB,IAAI,KAAK,uBAAuB,CAAC,UAAU;AAChE,iBAAO,MAAM;AAAA,QACvB,CAAS;AACD,cAAM,uBAAuB,eAAe,KAAK,2BAA2B;AAC5E,cAAM,IAAI,MAAM,yEAAyE,oBAAoB;AAAA,MAC9G;AACD,aAAO,KAAK,iBAAiB,MAAM,WAAW;AAAA,IAC/C;AAAA;AAAA;AAAA;AAAA;AAAA,IAKD,iBAAiB,MAAM,aAAa;AAClC,UAAI,GACF,GACA,GACA,eACA,WACA,cACA,SACA,YACA,aACA,OACA,SACA,UACA,WACA,KACA;AACF,YAAM,UAAU;AAChB,YAAM,YAAY,QAAQ;AAC1B,UAAI,SAAS;AACb,UAAI,qBAAqB;AAKzB,YAAM,wBAAwB,KAAK,YAC/B,IACA,KAAK,MAAM,KAAK,SAAS,EAAE;AAC/B,YAAM,gBAAgB,IAAI,MAAM,qBAAqB;AACrD,YAAM,SAAS,CAAE;AACjB,UAAI,OAAO,KAAK,kBAAkB,IAAI;AACtC,UAAI,SAAS,KAAK,kBAAkB,IAAI;AACxC,YAAM,SAAS,iBAAiB,KAAK,WAAW;AAChD,YAAM,aAAa,KAAK;AACxB,YAAM,wBAAwB,KAAK,OAAO;AAC1C,UAAI,yBAAyB;AAC7B,UAAI,qBAAqB,CAAE;AAC3B,UAAI,mCAAmC,CAAE;AACzC,YAAM,YAAY,CAAE;AACpB,YAAM,aAAa,CAAE;AACrB,aAAO,OAAO,UAAU;AACxB,UAAI;AACJ,eAAS,0BAA0B;AACjC,eAAO;AAAA,MACR;AACD,eAAS,6BAA6B,UAAU;AAC9C,cAAM,mBAAmB,yBAAyB,QAAQ;AAC1D,cAAM,mBAAmB,iCAAiC,gBAAgB;AAC1E,YAAI,qBAAqB,QAAW;AAClC,iBAAO;AAAA,QACjB,OAAe;AACL,iBAAO;AAAA,QACR;AAAA,MACF;AACD,YAAM,WAAW,CAAC,aAAa;AAE7B,YACE,UAAU,WAAW;AAAA;AAAA,QAGrB,SAAS,UAAU,cAAc,QACjC;AAGA,gBAAME,OAAM,KAAK,OAAO,qBAAqB,iCAAiC,QAAQ;AACtF,iBAAO,KAAK;AAAA,YACV,QAAQ,SAAS;AAAA,YACjB,MAAM,SAAS;AAAA,YACf,QAAQ,SAAS;AAAA,YACjB,QAAQ,SAAS,MAAM;AAAA,YACvB,SAASA;AAAA,UACrB,CAAW;AAAA,QACX,OAAe;AACL,oBAAU,IAAK;AACf,gBAAM,UAAU,KAAK,SAAS;AAC9B,+BAAqB,KAAK,mBAAmB,OAAO;AACpD,6CAAmC,KAAK,6BAA6B,OAAO;AAC5E,mCAAyB,mBAAmB;AAC5C,gBAAM,qBAAqB,KAAK,mBAAmB,OAAO,KAAK,KAAK,OAAO,aAAa;AACxF,cAAI,oCAAoC,oBAAoB;AAC1D,kCAAsB;AAAA,UAClC,OAAiB;AACL,kCAAsB;AAAA,UACvB;AAAA,QACF;AAAA,MACF;AACD,eAAS,UAAU,SAAS;AAC1B,kBAAU,KAAK,OAAO;AACtB,2CAAmC,KAAK,6BAA6B,OAAO;AAC5E,6BAAqB,KAAK,mBAAmB,OAAO;AACpD,iCAAyB,mBAAmB;AAC5C,iCAAyB,mBAAmB;AAC5C,cAAM,qBAAqB,KAAK,mBAAmB,OAAO,KAAK,KAAK,OAAO,aAAa;AACxF,YAAI,oCAAoC,oBAAoB;AAC1D,gCAAsB;AAAA,QAChC,OAAe;AACL,gCAAsB;AAAA,QACvB;AAAA,MACF;AAGD,gBAAU,KAAK,MAAM,WAAW;AAChC,UAAI;AACJ,YAAM,kBAAkB,KAAK,OAAO;AACpC,aAAO,SAAS,WAAW;AACzB,uBAAe;AACf,cAAM,eAAe,QAAQ,WAAW,MAAM;AAC9C,cAAM,2BAA2B,oBAAoB,YAAY;AACjE,cAAM,uBAAuB,yBAAyB;AACtD,aAAK,IAAI,GAAG,IAAI,sBAAsB,KAAK;AACzC,uBAAa,yBAAyB,CAAC;AACvC,gBAAM,cAAc,WAAW;AAC/B,oBAAU;AAEV,gBAAM,iBAAiB,WAAW;AAClC,cAAI,mBAAmB,OAAO;AAC5B,gBAAI,iBAAiB,gBAAgB;AAEnC,6BAAe;AAAA,YAChB;AAAA,UACb,WAAqB,WAAW,aAAa,MAAM;AACvC,oBAAQ,YAAY,KAAK,SAAS,QAAQ,eAAe,MAAM;AAC/D,gBAAI,UAAU,MAAM;AAClB,6BAAe,MAAM,CAAC;AACtB,kBAAI,MAAM,YAAY,QAAW;AAC/B,0BAAU,MAAM;AAAA,cACjB;AAAA,YACf,OAAmB;AACL,6BAAe;AAAA,YAChB;AAAA,UACb,OAAiB;AACL,iBAAK,gBAAgB,aAAa,MAAM;AACxC,2BAAe,KAAK,MAAM,aAAa,MAAM,MAAM;AAAA,UACpD;AACD,cAAI,iBAAiB,MAAM;AAGzB,wBAAY,WAAW;AACvB,gBAAI,cAAc,QAAW;AAG3B,oBAAM,kBAAkB,UAAU;AAClC,mBAAK,IAAI,GAAG,IAAI,iBAAiB,KAAK;AACpC,sBAAM,kBAAkB,mBAAmB,UAAU,CAAC,CAAC;AACvD,sBAAM,mBAAmB,gBAAgB;AACzC,6BAAa;AAGb,oBAAI,gBAAgB,aAAa,MAAM;AACrC,0BAAQ,iBAAiB,KAAK,SAAS,QAAQ,eAAe,MAAM;AACpE,sBAAI,UAAU,MAAM;AAClB,oCAAgB,MAAM,CAAC;AACvB,wBAAI,MAAM,YAAY,QAAW;AAC/B,mCAAa,MAAM;AAAA,oBACpB;AAAA,kBACrB,OAAyB;AACL,oCAAgB;AAAA,kBACjB;AAAA,gBACnB,OAAuB;AACL,uBAAK,gBAAgB,kBAAkB,MAAM;AAC7C,kCAAgB,KAAK,MAAM,kBAAkB,MAAM,MAAM;AAAA,gBAC1D;AACD,oBAAI,iBAAiB,cAAc,SAAS,aAAa,QAAQ;AAC/D,iCAAe;AACf,4BAAU;AACV,+BAAa;AAGb;AAAA,gBACD;AAAA,cACF;AAAA,YACF;AACD;AAAA,UACD;AAAA,QACF;AAED,YAAI,iBAAiB,MAAM;AACzB,wBAAc,aAAa;AAC3B,kBAAQ,WAAW;AACnB,cAAI,UAAU,QAAW;AACvB,sBAAU,WAAW;AAGrB,uBAAW,KAAK;AAAA,cACd;AAAA,cACA;AAAA,cACA;AAAA,cACA,WAAW;AAAA,cACX;AAAA,cACA;AAAA,cACA;AAAA,YACD;AACD,iBAAK,cAAc,UAAU,OAAO;AAEpC,gBAAI,UAAU,OAAO;AACnB,mCAAqB,KAAK,SAAS,eAAe,oBAAoB,QAAQ;AAAA,YAC5F,OAAmB;AACL,qBAAO,KAAK,EAAE,KAAK,QAAQ;AAAA,YAC5B;AAAA,UACF;AACD,iBAAO,KAAK,UAAU,MAAM,WAAW;AACvC,mBAAS,SAAS;AAElB,mBAAS,KAAK,iBAAiB,QAAQ,WAAW;AAClD,cAAI,eAAe,QAAQ,WAAW,sBAAsB,MAAM;AAChE,gBAAI,kBAAkB;AACtB,gBAAI;AACJ,gBAAI;AACJ,kCAAsB,YAAY;AAClC,eAAG;AACD,gCAAkB,sBAAsB,KAAK,YAAY;AACzD,kBAAI,oBAAoB,MAAM;AAC5B,kCAAkB,sBAAsB,YAAY;AACpD;AAAA,cACD;AAAA,YACf,SAAqB,oBAAoB;AAC7B,gBAAI,oBAAoB,GAAG;AACzB,qBAAO,OAAO;AACd,uBAAS,cAAc;AACvB,mBAAK;AAAA,gBACH;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cACD;AAAA,YACF;AAAA,UACF;AAED,eAAK,YAAY,YAAY,UAAU,WAAW,QAAQ;AAAA,QACpE,OAAe;AAEL,gBAAM,mBAAmB;AACzB,gBAAM,YAAY;AAClB,gBAAM,cAAc;AACpB,cAAI,mBAAmB,oBAAoB;AAC3C,iBAAO,qBAAqB,SAAS,SAAS,WAAW;AAEvD,mBAAO,KAAK,UAAU,MAAM,CAAC;AAC7B;AACA,iBAAK,IAAI,GAAG,IAAI,wBAAwB,KAAK;AAC3C,oBAAMC,cAAa,mBAAmB,CAAC;AACvC,oBAAM,cAAcA,YAAW;AAE/B,oBAAM,iBAAiBA,YAAW;AAClC,kBAAI,mBAAmB,OAAO;AAC5B,oBAAI,QAAQ,WAAW,MAAM,MAAM,gBAAgB;AAEjD,qCAAmB;AAAA,gBACpB;AAAA,cACjB,WAAyBA,YAAW,aAAa,MAAM;AACvC,mCAAmB,YAAY,KAAK,SAAS,QAAQ,eAAe,MAAM,MAAM;AAAA,cAChG,OAAqB;AACL,qBAAK,gBAAgB,aAAa,MAAM;AACxC,mCAAmB,YAAY,KAAK,IAAI,MAAM;AAAA,cAC/C;AACD,kBAAI,qBAAqB,MAAM;AAC7B;AAAA,cACD;AAAA,YACF;AAAA,UACF;AACD,sBAAY,SAAS;AACrB,mBAAS,KAAK,iBAAiB,QAAQ,SAAS;AAEhD,gBAAM,KAAK,OAAO,qBAAqB;AAAA,YACrC;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACD;AACD,iBAAO,KAAK;AAAA,YACV,QAAQ;AAAA,YACR,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,SAAS;AAAA,UACrB,CAAW;AACD,cAAI,oBAAoB,OAAO;AAC7B;AAAA,UACD;AAAA,QACF;AAAA,MACF;AAGD,UAAI,CAAC,KAAK,WAAW;AAEnB,sBAAc,SAAS;AAAA,MACxB;AACD,aAAO;AAAA,QACL,QAAQ;AAAA,QACR;AAAA,QACA;AAAA,MACD;AAAA,IACF;AAAA,IACD,YAAY,QAAQ,UAAU,WAAW,UAAU;AACjD,UAAI,OAAO,QAAQ,MAAM;AAGvB,cAAM,WAAW,OAAO;AACxB,iBAAS,QAAQ;AACjB,YAAI,aAAa,QAAW;AAC1B,oBAAU,KAAK,MAAM,QAAQ;AAAA,QAC9B;AAAA,MACT,WAAiB,OAAO,SAAS,QAAW;AACpC,kBAAU,KAAK,MAAM,OAAO,IAAI;AAAA,MACjC;AAAA,IACF;AAAA,IACD,UAAU,MAAM,QAAQ;AACtB,aAAO,KAAK,UAAU,MAAM;AAAA,IAC7B;AAAA,IACD,gBAAgB,QAAQ,cAAc;AACpC,aAAO,YAAY;AAAA,IACpB;AAAA;AAAA,IAED,iCAAiC,UAAU,OAAO,WAAW,iBAAiB,MAAM,QAAQ,aAAa;AACvG,UAAI,cAAc;AAClB,UAAI,UAAU,QAAW;AAEvB,uBAAe,cAAc,cAAc;AAC3C,2BAAmB,eAAe,KAAK;AACvC,YAAI,EAAE,oBAAoB,KAAK,iBAAiB,OAAO;AAErD,mBAAS,UAAU,OAAO;AAG1B,mBAAS,YAAY,SAAS,IAAI,CAAC;AAAA,QACpC;AAAA,MAEF;AAAA,IACF;AAAA,IACD,iBAAiB,WAAW,aAAa;AACvC,aAAO,YAAY;AAAA,IACpB;AAAA,IACD,sBAAsB,OAAO,aAAa,cAAc,WAAW;AACjE,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA,IACF;AAAA,IACD,qBAAqB,OAAO,aAAa,cAAc,WAAW,WAAW,aAAa;AACxF,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA,IACF;AAAA,IACD,gBAAgB,OAAO,aAAa,cAAc,WAAW,WAAW,aAAa,aAAa;AAChG,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA,WAAW,cAAc,cAAc;AAAA,QACvC;AAAA,QACA,SAAS;AAAA,QACT;AAAA,QACA,WAAW,cAAc,cAAc;AAAA,QACvC;AAAA,QACA;AAAA,MACD;AAAA,IACF;AAAA,IACD,kBAAkB,aAAa,OAAO,YAAY;AAChD,kBAAY,KAAK,UAAU;AAC3B,aAAO;AAAA,IACR;AAAA,IACD,0BAA0B,aAAa,OAAO,YAAY;AACxD,kBAAY,KAAK,IAAI;AACrB;AACA,aAAO;AAAA,IACR;AAAA,IACD,sBAAsB,OAAO,SAAS;AAAA,IAAE;AAAA,IACxC,wBAAwB,OAAO,SAAS;AACtC,UAAI,YAAY,MAAM;AACpB,cAAM,UAAU;AAAA,MACjB;AAAA,IACF;AAAA,IACD,cAAc,SAAS,MAAM,QAAQ;AACnC,YAAM,QAAQ,QAAQ,KAAK,IAAI;AAC/B,UAAI,UAAU,MAAM;AAClB,eAAO,KAAK,UAAU,QAAQ,QAAQ,SAAS;AAAA,MAChD;AACD,aAAO;AAAA,IACR;AAAA,IACD,cAAc,SAAS,MAAM;AAC3B,YAAM,cAAc,QAAQ,KAAK,IAAI;AACrC,aAAO,gBAAgB,OAAO,YAAY,CAAC,IAAI;AAAA,IAChD;AAAA,EACF;AACD,EAAAH,OAAM,UACJ;AAEF,EAAAA,OAAM,KAAK;AAEX,WAAS,WAAW,SAAS;AAC3B,QAAI,cAAc,OAAO,GAAG;AAC1B,aAAO,QAAQ;AAAA,IACrB,OAAW;AACL,aAAO,QAAQ;AAAA,IAChB;AAAA,EACF;AACD,WAAS,cAAc,KAAK;AAC1B,WAAO,SAAS,IAAI,KAAK,KAAK,IAAI,UAAU;AAAA,EAC7C;AACD,QAAM,SAAS;AACf,QAAM,aAAa;AACnB,QAAM,QAAQ;AACd,QAAM,QAAQ;AACd,QAAM,YAAY;AAClB,QAAM,WAAW;AACjB,QAAM,aAAa;AACnB,QAAM,cAAc;AACpB,QAAM,mBAAmB;AACzB,WAASI,aAAY,QAAQ;AAC3B,WAAO,oBAAoB,MAAM;AAAA,EAClC;AACD,WAAS,oBAAoB,QAAQ;AACnC,UAAM,UAAU,OAAO;AACvB,UAAM,YAAY,CAAE;AACpB,cAAU,OAAO,OAAO;AACxB,QAAI,CAAC,YAAY,OAAO,GAAG;AACzB,gBAAU,UAAU;AAAA,IACrB;AACD,QAAI,IAAI,QAAQ,MAAM,GAAG;AACvB,YACE;AAAA,IAGH;AACD,QAAI,IAAI,QAAQ,UAAU,GAAG;AAE3B,gBAAU,aAAa,OAAO,UAAU;AAAA,IACzC;AACD,sBAAkB,CAAC,SAAS,CAAC;AAC7B,QAAI,IAAI,QAAQ,KAAK,GAAG;AACtB,gBAAU,QAAQ,OAAO,KAAK;AAAA,IAC/B;AACD,QAAI,IAAI,QAAQ,KAAK,GAAG;AACtB,gBAAU,QAAQ,OAAO,KAAK;AAAA,IAC/B;AACD,QAAI,IAAI,QAAQ,QAAQ,GAAG;AACzB,gBAAU,WAAW,OAAO,QAAQ;AAAA,IACrC;AACD,QAAI,IAAI,QAAQ,SAAS,GAAG;AAC1B,gBAAU,YAAY,OAAO,SAAS;AAAA,IACvC;AACD,QAAI,IAAI,QAAQ,UAAU,GAAG;AAC3B,gBAAU,aAAa,OAAO,UAAU;AAAA,IACzC;AACD,QAAI,IAAI,QAAQ,WAAW,GAAG;AAC5B,gBAAU,cAAc,OAAO,WAAW;AAAA,IAC3C;AACD,QAAI,IAAI,QAAQ,gBAAgB,GAAG;AACjC,gBAAU,mBAAmB,OAAO,gBAAgB;AAAA,IACrD;AACD,WAAO;AAAA,EACR;AACD,QAAM,MAAMA,aAAY,EAAE,MAAM,OAAO,SAASJ,OAAM,IAAI;AAC1D,oBAAkB,CAAC,GAAG,CAAC;AACvB,WAAS,oBAAoB,SAAS,OAAO,aAAa,WAAW,WAAW,SAAS,aAAa,WAAW;AAC/G,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,cAAc,QAAQ;AAAA,MACtB,WAAW;AAAA,IACZ;AAAA,EACF;AACD,WAAS,aAAa,OAAO,SAAS;AACpC,WAAO,uBAAuB,OAAO,OAAO;AAAA,EAC7C;AAED,QAAM,6BAA6B;AAAA,IACjC,0BAA0B,EAAE,UAAU,QAAQ,UAAU,SAAQ,GAAI;AAClE,YAAM,WAAW,cAAc,QAAQ;AACvC,YAAM,cAAc,WAAW,OAAO,WAAW,QAAQ,UAAU,qBAAqB,SAAS;AACjG,YAAM,MAAM,aAAa,8BAA8B,OAAO;AAC9D,aAAO;AAAA,IACR;AAAA,IACD,8BAA8B,EAAE,gBAAgB,YAAY;AAC1D,aAAO,+CAA+C,eAAe;AAAA,IACtE;AAAA,IACD,wBAAwB,EAAE,qBAAqB,QAAQ,UAAU,uBAAuB,YAAY;AAClG,YAAM,YAAY;AAElB,YAAM,aAAa,KAAK,MAAM,EAAE;AAChC,YAAM,YAAY,mBAAmB,aAAa;AAClD,UAAI,uBAAuB;AACzB,eAAO,YAAY,wBAAwB;AAAA,MACnD,OAAa;AACL,cAAM,oBAAoB,OAAO,qBAAqB,CAAC,QAAQ,iBAAiB,OAAO,OAAO,YAAY,GAAG,EAAE;AAC/G,cAAM,0BAA0B;AAAA,UAC9B;AAAA,UACA,CAAC,aAAa,IAAI,IAAI,UAAU,CAAC,kBAAkB,WAAW,aAAa,CAAC,EAAE,KAAK,IAAI;AAAA,QACxF;AACD,cAAM,yBAAyB,IAAI,yBAAyB,CAAC,SAAS,QAAQ,KAAK,MAAM,MAAM,SAAS;AACxG,cAAM,wBAAwB;AAAA,EAA2C,uBAAuB,KAAK,IAAI;AACzG,eAAO,YAAY,wBAAwB;AAAA,MAC5C;AAAA,IACF;AAAA,IACD,sBAAsB,EAAE,wBAAwB,QAAQ,uBAAuB,SAAQ,GAAI;AACzF,YAAM,YAAY;AAElB,YAAM,aAAa,KAAK,MAAM,EAAE;AAChC,YAAM,YAAY,mBAAmB,aAAa;AAClD,UAAI,uBAAuB;AACzB,eAAO,YAAY,wBAAwB;AAAA,MACnD,OAAa;AACL,cAAM,0BAA0B;AAAA,UAC9B;AAAA,UACA,CAAC,aAAa,IAAI,IAAI,UAAU,CAAC,kBAAkB,WAAW,aAAa,CAAC,EAAE,KAAK,GAAG;AAAA,QACvF;AACD,cAAM,wBACJ;AAAA,KACI,wBAAwB,KAAK,IAAI;AACvC,eAAO,YAAY,wBAAwB;AAAA,MAC5C;AAAA,IACF;AAAA,EACF;AACD,SAAO,OAAO,0BAA0B;AACxC,QAAM,sCAAsC;AAAA,IAC1C,uBAAuB,cAAc,eAAe;AAClD,YAAM,MACJ,kEACA,cAAc,kBACd,kCAEA,aAAa,OACb;AACF,aAAO;AAAA,IACR;AAAA,EACF;AACD,QAAM,uCAAuC;AAAA,IAC3C,yBAAyB,cAAc,gBAAgB;AACrD,eAASK,4BAA2B,MAAM;AACxC,YAAI,gBAAgB,UAAU;AAC5B,iBAAO,KAAK,aAAa;AAAA,QACnC,WAAmB,gBAAgB,aAAa;AACtC,iBAAO,KAAK;AAAA,QACtB,OAAe;AACL,iBAAO;AAAA,QACR;AAAA,MACF;AACD,YAAM,eAAe,aAAa;AAClC,YAAM,gBAAgB,KAAK,cAAc;AACzC,YAAM,QAAQ,cAAc;AAC5B,YAAM,UAAU,qBAAqB,aAAa;AAClD,YAAM,gBAAgBA,4BAA2B,aAAa;AAC9D,YAAM,mBAAmB,QAAQ;AACjC,UAAI,MAAM,KAAK,UAAU,mBAAmB,QAAQ,QAClD,gBAAgB,oBAAoB,oBAAoB;AAAA,4CAG5C,eAAe,0CACmB;AAAA;AAAA;AAIhD,YAAM,IAAI,QAAQ,WAAW,GAAG;AAChC,YAAM,IAAI,QAAQ,UAAU,IAAI;AAChC,aAAO;AAAA,IACR;AAAA,IACD,4BAA4B,MAAM;AAChC,YAAM,SACJ;AAAA,0EAC2E,KAAK;AAAA;AAAA;AAAA;AAIlF,aAAO;AAAA,IACR;AAAA,IACD,qCAAqC,SAAS;AAC5C,YAAM,UAAU,IAAI,QAAQ,YAAY,CAAC,YAAY,WAAW,OAAO,CAAC,EAAE,KAAK,IAAI;AACnF,YAAM,aAAa,QAAQ,YAAY,QAAQ,IAAI,KAAK,QAAQ,YAAY;AAC5E,YAAM,SACJ,4BAA4B,QAAQ,iBAAiB,KAAK,IAAI;AAAA,QACrD,uBAAuB,QAAQ,aAAa;AAAA,GACjD;AAAA;AAAA;AAGN,aAAO;AAAA,IACR;AAAA,IACD,+BAA+B,SAAS;AACtC,YAAM,UAAU,IAAI,QAAQ,YAAY,CAAC,YAAY,WAAW,OAAO,CAAC,EAAE,KAAK,IAAI;AACnF,YAAM,aAAa,QAAQ,YAAY,QAAQ,IAAI,KAAK,QAAQ,YAAY;AAC5E,UAAI,cACF,qCAAqC,QAAQ,iBAAiB,KAAK,IAAI,YAAY,uBACvE,QAAQ,aAAa;AAAA,GAC7B;AAAA;AACN,oBACE,cACA;AAAA;AAEF,aAAO;AAAA,IACR;AAAA,IACD,0BAA0B,SAAS;AACjC,UAAI,UAAU,qBAAqB,QAAQ,UAAU;AACrD,UAAI,QAAQ,WAAW,QAAQ,GAAG;AAChC,mBAAW,QAAQ,WAAW;AAAA,MAC/B;AACD,YAAM,SACJ,mBAAmB,yBAAyB,QAAQ,aAAa;AAAA;AAEnE,aAAO;AAAA,IACR;AAAA;AAAA;AAAA,IAGD,oBAAoB,SAAS;AAE3B,aAAO;AAAA,IACR;AAAA,IACD,2BAA2B,SAAS;AAClC,YAAM,SACJ,iCAAiC,QAAQ,iBAAiB,YAChD,QAAQ,YAAY,gBAAgB,QAAQ,aAAa;AAAA;AAErE,aAAO;AAAA,IACR;AAAA,IACD,8BAA8B,SAAS;AACrC,YAAM,SACJ;AAAA,KACM,QAAQ,YAAY,gBAAgB,QAAQ,aAAa;AAAA,OAC7D,QAAQ,YAAY,WAAW,SAAS;AAE5C,aAAO;AAAA,IACR;AAAA,IACD,wBAAwB,SAAS;AAC/B,YAAM,WAAW,QAAQ,aAAa;AACtC,YAAM,YAAY,IAAI,QAAQ,mBAAmB,CAAC,aAAa,SAAS,IAAI;AAC5E,YAAM,oBAAoB,GAAG,gBAAgB,UAAU,OAAO,CAAC,QAAQ,CAAC,EAAE,KAAK,OAAO;AACtF,YAAM,SACJ;AAAA,SACU;AAAA;AAAA,GACgE;AAAA;AAAA;AAG5E,aAAO;AAAA,IACR;AAAA;AAAA;AAAA,IAGD,0BAA0B,SAAS;AAEjC,aAAO;AAAA,IACR;AAAA,IACD,4BAA4B,SAAS;AACnC,UAAI;AACJ,UAAI,QAAQ,wBAAwB,MAAM;AACxC,mBAAW,QAAQ,aAAa;AAAA,MACxC,OAAa;AACL,mBAAW,QAAQ;AAAA,MACpB;AACD,YAAM,SAAS,iCAAiC,mDAAmD,QAAQ;AAC3G,aAAO;AAAA,IACR;AAAA,EACF;AAED,WAAS,iBAAiB,WAAW,gBAAgB;AACnD,UAAM,cAAc,IAAI,uBAAuB,WAAW,cAAc;AACxE,gBAAY,YAAa;AACzB,WAAO,YAAY;AAAA,EACpB;AACD,QAAM,+BAA+B,YAAY;AAAA,IAC/C,YAAY,eAAe,gBAAgB;AACzC,YAAO;AACP,WAAK,gBAAgB;AACrB,WAAK,iBAAiB;AACtB,WAAK,SAAS,CAAE;AAAA,IACjB;AAAA,IACD,cAAc;AACZ,cAAQ,OAAO,KAAK,aAAa,GAAG,CAAC,SAAS;AAC5C,aAAK,eAAe;AACpB,aAAK,OAAO,IAAI;AAAA,MACxB,CAAO;AAAA,IACF;AAAA,IACD,iBAAiB,MAAM;AACrB,YAAM,MAAM,KAAK,cAAc,KAAK,eAAe;AACnD,UAAI,CAAC,KAAK;AACR,cAAM,MAAM,KAAK,eAAe,uBAAuB,KAAK,cAAc,IAAI;AAC9E,aAAK,OAAO,KAAK;AAAA,UACf,SAAS;AAAA,UACT,MAAM,0BAA0B;AAAA,UAChC,UAAU,KAAK,aAAa;AAAA,UAC5B,mBAAmB,KAAK;AAAA,QAClC,CAAS;AAAA,MACT,OAAa;AACL,aAAK,iBAAiB;AAAA,MACvB;AAAA,IACF;AAAA,EACF;AAED,QAAM,yCAAyC,WAAW;AAAA,IACxD,YAAY,SAAS,MAAM;AACzB,YAAO;AACP,WAAK,UAAU;AACf,WAAK,OAAO;AACZ,WAAK,mBAAmB,CAAE;AAC1B,WAAK,qBAAqB;AAC1B,WAAK,2BAA2B;AAChC,WAAK,QAAQ;AACb,WAAK,gBAAgB;AAAA,IACtB;AAAA,IACD,eAAe;AACb,WAAK,QAAQ;AACb,UAAI,KAAK,KAAK,UAAU,CAAC,MAAM,KAAK,QAAQ,MAAM;AAChD,cAAM,MAAM,qDAAqD;AAAA,MAClE;AAED,WAAK,YAAY,MAAM,KAAK,KAAK,SAAS,EAAE,QAAS;AACrD,WAAK,kBAAkB,MAAM,KAAK,KAAK,eAAe,EAAE,QAAS;AAEjE,WAAK,UAAU,IAAK;AACpB,WAAK,gBAAgB,IAAK;AAC1B,WAAK,mBAAoB;AACzB,WAAK,KAAK,KAAK,OAAO;AACtB,aAAO,KAAK;AAAA,IACb;AAAA,IACD,KAAK,MAAM,WAAW,IAAI;AAExB,UAAI,CAAC,KAAK,OAAO;AACf,cAAM,KAAK,MAAM,QAAQ;AAAA,MAC1B;AAAA,IACF;AAAA,IACD,YAAY,SAAS,UAAU,UAAU;AAEvC,UAAI,QAAQ,eAAe,SAAS,KAAK,sBAAsB,QAAQ,QAAQ,KAAK,0BAA0B;AAC5G,cAAM,WAAW,SAAS,OAAO,QAAQ;AACzC,aAAK,mBAAoB;AACzB,aAAK,KAAK,QAAQ,gBAAgB,QAAQ;AAAA,MAC3C;AAAA,IACF;AAAA,IACD,qBAAqB;AAEnB,UAAI,QAAQ,KAAK,SAAS,GAAG;AAG3B,aAAK,qBAAqB;AAC1B,aAAK,2BAA2B;AAChC,aAAK,gBAAgB;AAAA,MAC7B,OAAa;AACL,aAAK,qBAAqB,KAAK,UAAU,IAAK;AAC9C,aAAK,2BAA2B,KAAK,gBAAgB,IAAK;AAAA,MAC3D;AAAA,IACF;AAAA,EACF;AACD,QAAM,6BAA6B,iCAAiC;AAAA,IAClE,YAAY,SAAS,MAAM;AACzB,YAAM,SAAS,IAAI;AACnB,WAAK,OAAO;AACZ,WAAK,mBAAmB;AACxB,WAAK,yBAAyB;AAC9B,WAAK,mBAAmB,KAAK,KAAK,QAAQ;AAC1C,WAAK,yBAAyB,KAAK,KAAK;AAAA,IACzC;AAAA,IACD,aAAa,UAAU,UAAU,UAAU;AACzC,UACE,KAAK,iBACL,SAAS,aAAa,SAAS,KAAK,oBACpC,SAAS,QAAQ,KAAK,0BACtB,CAAC,KAAK,OACN;AACA,cAAM,WAAW,SAAS,OAAO,QAAQ;AACzC,cAAM,WAAW,IAAI,YAAY,EAAE,YAAY,SAAQ,CAAE;AACzD,aAAK,mBAAmB,MAAM,QAAQ;AACtC,aAAK,QAAQ;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAKD,QAAM,kDAAkD,WAAW;AAAA,IACjE,YAAY,SAAS,YAAY;AAC/B,YAAO;AACP,WAAK,UAAU;AACf,WAAK,aAAa;AAClB,WAAK,SAAS;AAAA,QACZ,OAAO;AAAA,QACP,YAAY;AAAA,QACZ,aAAa;AAAA,MACd;AAAA,IACF;AAAA,IACD,eAAe;AACb,WAAK,KAAK,KAAK,OAAO;AACtB,aAAO,KAAK;AAAA,IACb;AAAA,EACF;AACD,QAAM,oCAAoC,0CAA0C;AAAA,IAClF,SAAS,UAAU,UAAU,UAAU;AACrC,UAAI,SAAS,QAAQ,KAAK,YAAY;AACpC,cAAM,iBAAiB,KAAK,SAAS,OAAO,QAAQ,CAAC;AACrD,aAAK,OAAO,cAAc,mBAAmB;AAC7C,YAAI,0BAA0B,UAAU;AACtC,eAAK,OAAO,QAAQ,eAAe;AACnC,eAAK,OAAO,aAAa,eAAe;AAAA,QACzC;AAAA,MACT,OAAa;AACL,cAAM,SAAS,UAAU,UAAU,QAAQ;AAAA,MAC5C;AAAA,IACF;AAAA,EACF;AACD,QAAM,uCAAuC,0CAA0C;AAAA,IACrF,YAAY,aAAa,UAAU,UAAU;AAC3C,UAAI,YAAY,QAAQ,KAAK,YAAY;AACvC,cAAM,oBAAoB,KAAK,SAAS,OAAO,QAAQ,CAAC;AACxD,aAAK,OAAO,cAAc,sBAAsB;AAChD,YAAI,6BAA6B,UAAU;AACzC,eAAK,OAAO,QAAQ,kBAAkB;AACtC,eAAK,OAAO,aAAa,kBAAkB;AAAA,QAC5C;AAAA,MACT,OAAa;AACL,cAAM,YAAY,aAAa,UAAU,QAAQ;AAAA,MAClD;AAAA,IACF;AAAA,EACF;AACD,QAAM,0CAA0C,0CAA0C;AAAA,IACxF,eAAe,gBAAgB,UAAU,UAAU;AACjD,UAAI,eAAe,QAAQ,KAAK,YAAY;AAC1C,cAAM,uBAAuB,KAAK,SAAS,OAAO,QAAQ,CAAC;AAC3D,aAAK,OAAO,cAAc,yBAAyB;AACnD,YAAI,gCAAgC,UAAU;AAC5C,eAAK,OAAO,QAAQ,qBAAqB;AACzC,eAAK,OAAO,aAAa,qBAAqB;AAAA,QAC/C;AAAA,MACT,OAAa;AACL,cAAM,eAAe,gBAAgB,UAAU,QAAQ;AAAA,MACxD;AAAA,IACF;AAAA,EACF;AAED,QAAM,6CAA6C,0CAA0C;AAAA,IAC3F,kBAAkB,mBAAmB,UAAU,UAAU;AACvD,UAAI,kBAAkB,QAAQ,KAAK,YAAY;AAC7C,cAAM,oCAAoC,KAAK,SAAS,OAAO,QAAQ,CAAC;AACxE,aAAK,OAAO,cAAc,sCAAsC;AAChE,YAAI,6CAA6C,UAAU;AACzD,eAAK,OAAO,QAAQ,kCAAkC;AACtD,eAAK,OAAO,aAAa,kCAAkC;AAAA,QAC5D;AAAA,MACT,OAAa;AACL,cAAM,kBAAkB,mBAAmB,UAAU,QAAQ;AAAA,MAC9D;AAAA,IACF;AAAA,EACF;AACD,WAAS,kBAAkB,WAAW,WAAW,WAAW,CAAA,GAAI;AAE9D,eAAW,MAAM,QAAQ;AACzB,QAAI,SAAS,CAAE;AACf,QAAI,IAAI;AAER,aAAS,kBAAkB,SAAS;AAClC,aAAO,QAAQ,OAAO,KAAK,WAAW,IAAI,CAAC,CAAC;AAAA,IAC7C;AAED,aAAS,uBAAuB,YAAY;AAC1C,YAAM,eAAe,kBAAkB,kBAAkB,UAAU,GAAG,WAAW,QAAQ;AACzF,aAAO,OAAO,OAAO,YAAY;AAAA,IAClC;AAQD,WAAO,SAAS,SAAS,aAAa,IAAI,UAAU,QAAQ;AAC1D,YAAM,OAAO,UAAU,CAAC;AAExB,UAAI,gBAAgB,aAAa;AAC/B,eAAO,uBAAuB,KAAK,UAAU;AAAA,MACrD,WAAiB,gBAAgB,aAAa;AACtC,eAAO,uBAAuB,KAAK,UAAU;AAAA,MACrD,WAAiB,gBAAgB,QAAQ;AACjC,iBAAS,uBAAuB,KAAK,UAAU;AAAA,MACvD,WAAiB,gBAAgB,qBAAqB;AAC9C,cAAM,SAAS,KAAK,WAAW,OAAO;AAAA,UACpC,IAAI,WAAW;AAAA,YACb,YAAY,KAAK;AAAA,UAC7B,CAAW;AAAA,QACX,CAAS;AACD,eAAO,uBAAuB,MAAM;AAAA,MAC5C,WAAiB,gBAAgB,kCAAkC;AAC3D,cAAM,SAAS;AAAA,UACb,IAAI,YAAY,EAAE,YAAY,KAAK,WAAU,CAAE;AAAA,UAC/C,IAAI,WAAW;AAAA,YACb,YAAY,CAAC,IAAI,SAAS,EAAE,cAAc,KAAK,UAAS,CAAE,CAAC,EAAE,OAAO,KAAK,UAAU;AAAA,UAC/F,CAAW;AAAA,QACF;AACD,eAAO,uBAAuB,MAAM;AAAA,MAC5C,WAAiB,gBAAgB,yBAAyB;AAClD,cAAM,SAAS,KAAK,WAAW,OAAO;AAAA,UACpC,IAAI,WAAW;AAAA,YACb,YAAY,CAAC,IAAI,SAAS,EAAE,cAAc,KAAK,UAAS,CAAE,CAAC,EAAE,OAAO,KAAK,UAAU;AAAA,UAC/F,CAAW;AAAA,QACX,CAAS;AACD,iBAAS,uBAAuB,MAAM;AAAA,MAC9C,WAAiB,gBAAgB,YAAY;AACrC,cAAM,SAAS,KAAK,WAAW,OAAO;AAAA,UACpC,IAAI,WAAW;AAAA,YACb,YAAY,KAAK;AAAA,UAC7B,CAAW;AAAA,QACX,CAAS;AACD,iBAAS,uBAAuB,MAAM;AAAA,MAC9C,WAAiB,gBAAgB,aAAa;AACtC,gBAAQ,KAAK,YAAY,CAAC,YAAY;AAIpC,cAAI,QAAQ,QAAQ,UAAU,MAAM,OAAO;AACzC,qBAAS,uBAAuB,QAAQ,UAAU;AAAA,UACnD;AAAA,QACX,CAAS;AACD,eAAO;AAAA,MACf,WAAiB,gBAAgB,UAAU;AACnC,iBAAS,KAAK,KAAK,YAAY;AAAA,MACvC,OAAa;AACL,cAAM,MAAM,sBAAsB;AAAA,MACnC;AACD;AAAA,IACD;AACD,WAAO,KAAK;AAAA,MACV,aAAa;AAAA,MACb,WAAW,KAAK,WAAW,CAAC;AAAA,IAClC,CAAK;AACD,WAAO;AAAA,EACR;AACD,WAAS,wBAAwB,YAAY,aAAa,YAAY,cAAc;AAClF,UAAM,oBAAoB;AAE1B,UAAM,wBAAwB,CAAC,iBAAiB;AAChD,UAAM,mBAAmB;AACzB,QAAI,oBAAoB;AACxB,UAAM,oBAAoB,YAAY;AACtC,UAAM,2BAA2B,oBAAoB,eAAe;AACpE,UAAM,SAAS,CAAE;AACjB,UAAM,gBAAgB,CAAE;AACxB,kBAAc,KAAK;AAAA,MACjB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,WAAW,CAAE;AAAA,MACb,iBAAiB,CAAE;AAAA,IACzB,CAAK;AACD,WAAO,CAAC,QAAQ,aAAa,GAAG;AAC9B,YAAM,WAAW,cAAc,IAAK;AAEpC,UAAI,aAAa,kBAAkB;AACjC,YAAI,qBAAqB,KAAK,aAAa,EAAE,OAAO,0BAA0B;AAE5E,wBAAc,IAAK;AAAA,QACpB;AACD;AAAA,MACD;AACD,YAAM,UAAU,SAAS;AACzB,YAAM,UAAU,SAAS;AACzB,YAAM,gBAAgB,SAAS;AAC/B,YAAM,sBAAsB,SAAS;AAErC,UAAI,QAAQ,OAAO,GAAG;AACpB;AAAA,MACD;AACD,YAAM,OAAO,QAAQ,CAAC;AAEtB,UAAI,SAAS,mBAAmB;AAC9B,cAAM,WAAW;AAAA,UACf,KAAK;AAAA,UACL,KAAK,KAAK,OAAO;AAAA,UACjB,WAAW,UAAU,aAAa;AAAA,UAClC,iBAAiB,UAAU,mBAAmB;AAAA,QAC/C;AACD,sBAAc,KAAK,QAAQ;AAAA,MACnC,WAAiB,gBAAgB,UAAU;AAEnC,YAAI,UAAU,oBAAoB,GAAG;AACnC,gBAAM,UAAU,UAAU;AAC1B,gBAAM,cAAc,YAAY,OAAO;AACvC,cAAI,WAAW,aAAa,KAAK,YAAY,GAAG;AAC9C,kBAAM,WAAW;AAAA,cACf,KAAK;AAAA,cACL,KAAK,KAAK,OAAO;AAAA,cACjB,WAAW;AAAA,cACX,iBAAiB;AAAA,YAClB;AACD,0BAAc,KAAK,QAAQ;AAAA,UAC5B;AAAA,QAEX,WAAmB,YAAY,oBAAoB,GAAG;AAE5C,iBAAO,KAAK;AAAA,YACV,eAAe,KAAK;AAAA,YACpB,qBAAqB,KAAK;AAAA,YAC1B,WAAW;AAAA,YACX,iBAAiB;AAAA,UAC7B,CAAW;AACD,8BAAoB;AAAA,QAC9B,OAAe;AACL,gBAAM,MAAM,sBAAsB;AAAA,QACnC;AAAA,MACT,WAAiB,gBAAgB,aAAa;AACtC,cAAM,eAAe,MAAM,aAAa;AACxC,qBAAa,KAAK,KAAK,eAAe;AACtC,cAAM,qBAAqB,MAAM,mBAAmB;AACpD,2BAAmB,KAAK,KAAK,GAAG;AAChC,cAAM,WAAW;AAAA,UACf,KAAK;AAAA,UACL,KAAK,KAAK,WAAW,OAAO,uBAAuB,KAAK,OAAO,CAAC;AAAA,UAChE,WAAW;AAAA,UACX,iBAAiB;AAAA,QAClB;AACD,sBAAc,KAAK,QAAQ;AAAA,MACnC,WAAiB,gBAAgB,QAAQ;AAEjC,cAAM,kBAAkB;AAAA,UACtB,KAAK;AAAA,UACL,KAAK,KAAK,OAAO;AAAA,UACjB,WAAW;AAAA,UACX,iBAAiB;AAAA,QAClB;AACD,sBAAc,KAAK,eAAe;AAElC,sBAAc,KAAK,gBAAgB;AACnC,cAAM,eAAe;AAAA,UACnB,KAAK;AAAA,UACL,KAAK,KAAK,WAAW,OAAO,KAAK,OAAO,CAAC;AAAA,UACzC,WAAW;AAAA,UACX,iBAAiB;AAAA,QAClB;AACD,sBAAc,KAAK,YAAY;AAAA,MACvC,WAAiB,gBAAgB,qBAAqB;AAE9C,cAAM,kBAAkB,IAAI,WAAW;AAAA,UACrC,YAAY,KAAK;AAAA,UACjB,KAAK,KAAK;AAAA,QACpB,CAAS;AACD,cAAM,UAAU,KAAK,WAAW,OAAO,CAAC,eAAe,GAAG,KAAK,OAAO,CAAC;AACvE,cAAM,WAAW;AAAA,UACf,KAAK;AAAA,UACL,KAAK;AAAA,UACL,WAAW;AAAA,UACX,iBAAiB;AAAA,QAClB;AACD,sBAAc,KAAK,QAAQ;AAAA,MACnC,WAAiB,gBAAgB,kCAAkC;AAE3D,cAAM,gBAAgB,IAAI,SAAS;AAAA,UACjC,cAAc,KAAK;AAAA,QAC7B,CAAS;AACD,cAAM,kBAAkB,IAAI,WAAW;AAAA,UACrC,YAAY,CAAC,aAAa,EAAE,OAAO,KAAK,UAAU;AAAA,UAClD,KAAK,KAAK;AAAA,QACpB,CAAS;AACD,cAAM,UAAU,KAAK,WAAW,OAAO,CAAC,eAAe,GAAG,KAAK,OAAO,CAAC;AACvE,cAAM,WAAW;AAAA,UACf,KAAK;AAAA,UACL,KAAK;AAAA,UACL,WAAW;AAAA,UACX,iBAAiB;AAAA,QAClB;AACD,sBAAc,KAAK,QAAQ;AAAA,MACnC,WAAiB,gBAAgB,yBAAyB;AAElD,cAAM,kBAAkB;AAAA,UACtB,KAAK;AAAA,UACL,KAAK,KAAK,OAAO;AAAA,UACjB,WAAW;AAAA,UACX,iBAAiB;AAAA,QAClB;AACD,sBAAc,KAAK,eAAe;AAElC,sBAAc,KAAK,gBAAgB;AACnC,cAAM,gBAAgB,IAAI,SAAS;AAAA,UACjC,cAAc,KAAK;AAAA,QAC7B,CAAS;AACD,cAAM,gBAAgB,IAAI,WAAW;AAAA,UACnC,YAAY,CAAC,aAAa,EAAE,OAAO,KAAK,UAAU;AAAA,UAClD,KAAK,KAAK;AAAA,QACpB,CAAS;AACD,cAAM,UAAU,KAAK,WAAW,OAAO,CAAC,aAAa,GAAG,KAAK,OAAO,CAAC;AACrE,cAAM,eAAe;AAAA,UACnB,KAAK;AAAA,UACL,KAAK;AAAA,UACL,WAAW;AAAA,UACX,iBAAiB;AAAA,QAClB;AACD,sBAAc,KAAK,YAAY;AAAA,MACvC,WAAiB,gBAAgB,YAAY;AAErC,cAAM,kBAAkB;AAAA,UACtB,KAAK;AAAA,UACL,KAAK,KAAK,OAAO;AAAA,UACjB,WAAW;AAAA,UACX,iBAAiB;AAAA,QAClB;AACD,sBAAc,KAAK,eAAe;AAElC,sBAAc,KAAK,gBAAgB;AAEnC,cAAM,gBAAgB,IAAI,WAAW;AAAA,UACnC,YAAY,KAAK;AAAA,UACjB,KAAK,KAAK;AAAA,QACpB,CAAS;AACD,cAAM,UAAU,KAAK,WAAW,OAAO,CAAC,aAAa,GAAG,KAAK,OAAO,CAAC;AACrE,cAAM,eAAe;AAAA,UACnB,KAAK;AAAA,UACL,KAAK;AAAA,UACL,WAAW;AAAA,UACX,iBAAiB;AAAA,QAClB;AACD,sBAAc,KAAK,YAAY;AAAA,MACvC,WAAiB,gBAAgB,aAAa;AAEtC,iBAAS,IAAI,KAAK,WAAW,SAAS,GAAG,KAAK,GAAG,KAAK;AACpD,gBAAM,UAAU,KAAK,WAAW,CAAC;AACjC,gBAAM,cAAc;AAAA,YAClB,KAAK;AAAA,YACL,KAAK,QAAQ,WAAW,OAAO,KAAK,OAAO,CAAC;AAAA,YAC5C,WAAW;AAAA,YACX,iBAAiB;AAAA,UAClB;AACD,wBAAc,KAAK,WAAW;AAC9B,wBAAc,KAAK,gBAAgB;AAAA,QACpC;AAAA,MACT,WAAiB,gBAAgB,aAAa;AACtC,sBAAc,KAAK;AAAA,UACjB,KAAK;AAAA,UACL,KAAK,KAAK,WAAW,OAAO,KAAK,OAAO,CAAC;AAAA,UACzC,WAAW;AAAA,UACX,iBAAiB;AAAA,QAC3B,CAAS;AAAA,MACT,WAAiB,gBAAgB,MAAM;AAE/B,sBAAc,KAAK,mBAAmB,MAAM,SAAS,eAAe,mBAAmB,CAAC;AAAA,MAChG,OAAa;AACL,cAAM,MAAM,sBAAsB;AAAA,MACnC;AAAA,IACF;AACD,WAAO;AAAA,EACR;AACD,WAAS,mBAAmB,SAAS,SAAS,eAAe,qBAAqB;AAChF,UAAM,eAAe,MAAM,aAAa;AACxC,iBAAa,KAAK,QAAQ,IAAI;AAC9B,UAAM,yBAAyB,MAAM,mBAAmB;AAExD,2BAAuB,KAAK,CAAC;AAC7B,WAAO;AAAA,MACL,KAAK;AAAA,MACL,KAAK,QAAQ;AAAA,MACb,WAAW;AAAA,MACX,iBAAiB;AAAA,IAClB;AAAA,EACF;AAED,MAAI;AACH,GAAC,SAAUC,YAAW;AACrB,IAAAA,WAAWA,WAAU,QAAQ,IAAI,CAAG,IAAG;AACvC,IAAAA,WAAWA,WAAU,YAAY,IAAI,CAAG,IAAG;AAC3C,IAAAA,WAAWA,WAAU,sBAAsB,IAAI,CAAG,IAAG;AACrD,IAAAA,WAAWA,WAAU,qCAAqC,IAAI,CAAG,IAAG;AACpE,IAAAA,WAAWA,WAAU,2BAA2B,IAAI,CAAG,IAAG;AAC1D,IAAAA,WAAWA,WAAU,aAAa,IAAI,CAAG,IAAG;AAAA,EAChD,GAAK,cAAc,YAAY,CAAA,EAAG;AAChC,WAAS,YAAY,MAAM;AAEzB,QAAI,gBAAgB,UAAU,SAAS,UAAU;AAC/C,aAAO,UAAU;AAAA,IAClB,WAAU,gBAAgB,cAAc,SAAS,cAAc;AAC9D,aAAO,UAAU;AAAA,IAClB,WAAU,gBAAgB,uBAAuB,SAAS,uBAAuB;AAChF,aAAO,UAAU;AAAA,IAClB,WAAU,gBAAgB,oCAAoC,SAAS,oCAAoC;AAC1G,aAAO,UAAU;AAAA,IAClB,WAAU,gBAAgB,2BAA2B,SAAS,2BAA2B;AACxF,aAAO,UAAU;AAAA,IAClB,WAAU,gBAAgB,eAAe,SAAS,eAAe;AAChE,aAAO,UAAU;AAAA,IACvB,OAAW;AACL,YAAM,MAAM,sBAAsB;AAAA,IACnC;AAAA,EACF;AACD,WAAS,wBACP,YACA,aACA,cACA,eACA,sBACA,eACA;AACA,UAAM,iBAAiB,uBAAuB,YAAY,aAAa,YAAY;AACnF,UAAMC,gBAAe,0BAA0B,cAAc,IACzD,qCACA;AACJ,WAAO,cAAc,gBAAgB,eAAeA,eAAc,oBAAoB;AAAA,EACvF;AAaD,WAAS,kCACP,YACA,aACA,GACA,sBACA,UACA,kBACA;AACA,UAAM,iBAAiB,iCAAiC,YAAY,aAAa,UAAU,CAAC;AAC5F,UAAMA,gBAAe,0BAA0B,cAAc,IACzD,qCACA;AACJ,WAAO,iBAAiB,eAAe,CAAC,GAAGA,eAAc,oBAAoB;AAAA,EAC9E;AACD,WAAS,+BAA+B,MAAM,eAAeA,eAAc,sBAAsB;AAC/F,UAAM,YAAY,KAAK;AACvB,UAAM,0BAA0B,MAAM,MAAM,CAAC,YAAY;AACvD,aAAO,MAAM,SAAS,CAAC,aAAa;AAClC,eAAO,SAAS,WAAW;AAAA,MACnC,CAAO;AAAA,IACP,CAAK;AAED,QAAI,eAAe;AAIjB,aAAO,SAAU,QAAQ;AAIvB,cAAM,aAAa,IAAI,QAAQ,CAAC,YAAY,QAAQ,IAAI;AACxD,iBAAS,IAAI,GAAG,IAAI,WAAW,KAAK;AAClC,gBAAM,UAAU,KAAK,CAAC;AACtB,gBAAM,iBAAiB,QAAQ;AAC/B,gBAAM,gBAAgB,WAAW,CAAC;AAClC,cAAI,kBAAkB,UAAa,cAAc,KAAK,IAAI,MAAM,OAAO;AAErE;AAAA,UACD;AACD;AAAU,qBAAS,IAAI,GAAG,IAAI,gBAAgB,KAAK;AACjD,oBAAM,WAAW,QAAQ,CAAC;AAC1B,oBAAM,iBAAiB,SAAS;AAChC,uBAAS,IAAI,GAAG,IAAI,gBAAgB,KAAK;AACvC,sBAAM,YAAY,KAAK,GAAG,IAAI,CAAC;AAC/B,oBAAIA,cAAa,WAAW,SAAS,CAAC,CAAC,MAAM,OAAO;AAGlD,2BAAS;AAAA,gBACV;AAAA,cACF;AAGD,qBAAO;AAAA,YACR;AAAA,QAGF;AAED,eAAO;AAAA,MACR;AAAA,IACP,WAAe,2BAA2B,CAAC,sBAAsB;AAG3D,YAAM,kBAAkB,IAAI,MAAM,CAAC,YAAY;AAC7C,eAAO,QAAQ,OAAO;AAAA,MAC9B,CAAO;AACD,YAAM,cAAc;AAAA,QAClB;AAAA,QACA,CAAC,QAAQ,SAAS,QAAQ;AACxB,kBAAQ,SAAS,CAAC,gBAAgB;AAChC,gBAAI,CAAC,IAAI,QAAQ,YAAY,YAAY,GAAG;AAC1C,qBAAO,YAAY,YAAY,IAAI;AAAA,YACpC;AACD,oBAAQ,YAAY,iBAAiB,CAAC,sBAAsB;AAC1D,kBAAI,CAAC,IAAI,QAAQ,iBAAiB,GAAG;AACnC,uBAAO,iBAAiB,IAAI;AAAA,cAC7B;AAAA,YACf,CAAa;AAAA,UACb,CAAW;AACD,iBAAO;AAAA,QACR;AAAA,QACD,CAAE;AAAA,MACH;AAID,aAAO,WAAY;AACjB,cAAM,YAAY,KAAK,GAAG,CAAC;AAC3B,eAAO,YAAY,UAAU,YAAY;AAAA,MAC1C;AAAA,IACP,OAAW;AAML,aAAO,WAAY;AACjB,iBAAS,IAAI,GAAG,IAAI,WAAW,KAAK;AAClC,gBAAM,UAAU,KAAK,CAAC;AACtB,gBAAM,iBAAiB,QAAQ;AAC/B;AAAU,qBAAS,IAAI,GAAG,IAAI,gBAAgB,KAAK;AACjD,oBAAM,WAAW,QAAQ,CAAC;AAC1B,oBAAM,iBAAiB,SAAS;AAChC,uBAAS,IAAI,GAAG,IAAI,gBAAgB,KAAK;AACvC,sBAAM,YAAY,KAAK,GAAG,IAAI,CAAC;AAC/B,oBAAIA,cAAa,WAAW,SAAS,CAAC,CAAC,MAAM,OAAO;AAGlD,2BAAS;AAAA,gBACV;AAAA,cACF;AAGD,qBAAO;AAAA,YACR;AAAA,QAGF;AAED,eAAO;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACD,WAAS,wCAAwC,KAAKA,eAAc,sBAAsB;AACxF,UAAM,0BAA0B,MAAM,KAAK,CAAC,aAAa;AACvD,aAAO,SAAS,WAAW;AAAA,IACjC,CAAK;AACD,UAAM,aAAa,IAAI;AAGvB,QAAI,2BAA2B,CAAC,sBAAsB;AACpD,YAAM,oBAAoB,QAAQ,GAAG;AACrC,UAAI,kBAAkB,WAAW,KAAK,QAAQ,kBAAkB,CAAC,EAAE,eAAe,GAAG;AACnF,cAAM,oBAAoB,kBAAkB,CAAC;AAC7C,cAAM,yBAAyB,kBAAkB;AACjD,eAAO,WAAY;AACjB,iBAAO,KAAK,GAAG,CAAC,EAAE,iBAAiB;AAAA,QACpC;AAAA,MACT,OAAa;AACL,cAAM,cAAc;AAAA,UAClB;AAAA,UACA,CAAC,QAAQ,aAAa,QAAQ;AAC5B,mBAAO,YAAY,YAAY,IAAI;AACnC,oBAAQ,YAAY,iBAAiB,CAAC,sBAAsB;AAC1D,qBAAO,iBAAiB,IAAI;AAAA,YAC1C,CAAa;AACD,mBAAO;AAAA,UACR;AAAA,UACD,CAAE;AAAA,QACH;AACD,eAAO,WAAY;AACjB,gBAAM,YAAY,KAAK,GAAG,CAAC;AAC3B,iBAAO,YAAY,UAAU,YAAY,MAAM;AAAA,QAChD;AAAA,MACF;AAAA,IACP,OAAW;AACL,aAAO,WAAY;AACjB;AAAU,mBAAS,IAAI,GAAG,IAAI,YAAY,KAAK;AAC7C,kBAAM,WAAW,IAAI,CAAC;AACtB,kBAAM,iBAAiB,SAAS;AAChC,qBAAS,IAAI,GAAG,IAAI,gBAAgB,KAAK;AACvC,oBAAM,YAAY,KAAK,GAAG,IAAI,CAAC;AAC/B,kBAAIA,cAAa,WAAW,SAAS,CAAC,CAAC,MAAM,OAAO;AAGlD,yBAAS;AAAA,cACV;AAAA,YACF;AAED,mBAAO;AAAA,UACR;AAED,eAAO;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACD,QAAM,mCAAmC,WAAW;AAAA,IAClD,YAAY,SAAS,kBAAkB,gBAAgB;AACrD,YAAO;AACP,WAAK,UAAU;AACf,WAAK,mBAAmB;AACxB,WAAK,iBAAiB;AAAA,IACvB;AAAA,IACD,eAAe;AACb,WAAK,KAAK,KAAK,OAAO;AACtB,aAAO,KAAK;AAAA,IACb;AAAA,IACD,cAAc,MAAM,kBAAkB,UAAU,UAAU;AACxD,UAAI,KAAK,QAAQ,KAAK,oBAAoB,KAAK,mBAAmB,kBAAkB;AAClF,aAAK,UAAU,SAAS,OAAO,QAAQ;AACvC,eAAO;AAAA,MACR;AAED,aAAO;AAAA,IACR;AAAA,IACD,WAAW,YAAY,UAAU,UAAU;AACzC,UAAI,CAAC,KAAK,cAAc,YAAY,UAAU,QAAQ,UAAU,QAAQ,GAAG;AACzE,cAAM,WAAW,YAAY,UAAU,QAAQ;AAAA,MAChD;AAAA,IACF;AAAA,IACD,eAAe,gBAAgB,UAAU,UAAU;AACjD,UAAI,CAAC,KAAK,cAAc,gBAAgB,UAAU,sBAAsB,UAAU,QAAQ,GAAG;AAC3F,cAAM,WAAW,gBAAgB,UAAU,QAAQ;AAAA,MACpD;AAAA,IACF;AAAA,IACD,kBAAkB,mBAAmB,UAAU,UAAU;AACvD,UAAI,CAAC,KAAK,cAAc,mBAAmB,UAAU,qCAAqC,UAAU,QAAQ,GAAG;AAC7G,cAAM,WAAW,mBAAmB,UAAU,QAAQ;AAAA,MACvD;AAAA,IACF;AAAA,IACD,SAAS,UAAU,UAAU,UAAU;AACrC,UAAI,CAAC,KAAK,cAAc,UAAU,UAAU,YAAY,UAAU,QAAQ,GAAG;AAC3E,cAAM,WAAW,UAAU,UAAU,QAAQ;AAAA,MAC9C;AAAA,IACF;AAAA,IACD,YAAY,aAAa,UAAU,UAAU;AAC3C,UAAI,CAAC,KAAK,cAAc,aAAa,UAAU,2BAA2B,UAAU,QAAQ,GAAG;AAC7F,cAAM,WAAW,aAAa,UAAU,QAAQ;AAAA,MACjD;AAAA,IACF;AAAA,EACF;AAID,QAAM,sCAAsC,YAAY;AAAA,IACtD,YAAY,kBAAkB,gBAAgB,WAAW;AACvD,YAAO;AACP,WAAK,mBAAmB;AACxB,WAAK,iBAAiB;AACtB,WAAK,YAAY;AACjB,WAAK,SAAS,CAAE;AAAA,IACjB;AAAA,IACD,cAAc,MAAM,kBAAkB;AACpC,UACE,KAAK,QAAQ,KAAK,oBAClB,KAAK,mBAAmB,qBACvB,KAAK,cAAc,UAAa,SAAS,KAAK,YAC/C;AACA,aAAK,SAAS,KAAK;AAAA,MACpB;AAAA,IACF;AAAA,IACD,YAAY,MAAM;AAChB,WAAK,cAAc,MAAM,UAAU,MAAM;AAAA,IAC1C;AAAA,IACD,gBAAgB,MAAM;AACpB,WAAK,cAAc,MAAM,UAAU,UAAU;AAAA,IAC9C;AAAA,IACD,yBAAyB,MAAM;AAC7B,WAAK,cAAc,MAAM,UAAU,oBAAoB;AAAA,IACxD;AAAA,IACD,sCAAsC,MAAM;AAC1C,WAAK,cAAc,MAAM,UAAU,mCAAmC;AAAA,IACvE;AAAA,IACD,6BAA6B,MAAM;AACjC,WAAK,cAAc,MAAM,UAAU,yBAAyB;AAAA,IAC7D;AAAA,IACD,iBAAiB,MAAM;AACrB,WAAK,cAAc,MAAM,UAAU,WAAW;AAAA,IAC/C;AAAA,EACF;AACD,WAAS,wBAAwB,MAAM;AACrC,UAAM,SAAS,IAAI,MAAM,IAAI;AAC7B,aAAS,IAAI,GAAG,IAAI,MAAM,KAAK;AAC7B,aAAO,CAAC,IAAI,CAAE;AAAA,IACf;AACD,WAAO;AAAA,EACR;AAMD,WAAS,eAAe,MAAM;AAC5B,QAAIC,QAAO,CAAC,EAAE;AACd,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,YAAM,UAAU,KAAK,CAAC;AACtB,YAAM,aAAa,CAAE;AACrB,eAAS,IAAI,GAAG,IAAIA,MAAK,QAAQ,KAAK;AACpC,cAAM,iBAAiBA,MAAK,CAAC;AAC7B,mBAAW,KAAK,iBAAiB,MAAM,QAAQ,YAAY;AAC3D,iBAAS,IAAI,GAAG,IAAI,QAAQ,gBAAgB,QAAQ,KAAK;AACvD,gBAAM,sBAAsB,MAAM,QAAQ,gBAAgB,CAAC;AAC3D,qBAAW,KAAK,iBAAiB,mBAAmB;AAAA,QACrD;AAAA,MACF;AACD,MAAAA,QAAO;AAAA,IACR;AACD,WAAOA;AAAA,EACR;AAID,WAAS,mBAAmB,mBAAmB,gBAAgB,KAAK;AAClE,aAAS,aAAa,GAAG,aAAa,kBAAkB,QAAQ,cAAc;AAE5E,UAAI,eAAe,KAAK;AACtB;AAAA,MACD;AACD,YAAM,yBAAyB,kBAAkB,UAAU;AAC3D,eAAS,YAAY,GAAG,YAAY,eAAe,QAAQ,aAAa;AACtE,cAAM,YAAY,eAAe,SAAS;AAC1C,YAAI,uBAAuB,SAAS,MAAM,MAAM;AAC9C,iBAAO;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAED,WAAO;AAAA,EACR;AACD,WAAS,kCAAkC,UAAU,GAAG;AACtD,UAAM,cAAc,IAAI,UAAU,CAAC,YAAY,kBAAkB,CAAC,OAAO,GAAG,CAAC,CAAC;AAC9E,UAAM,cAAc,wBAAwB,YAAY,MAAM;AAC9D,UAAM,aAAa,IAAI,aAAa,CAAC,iBAAiB;AACpD,YAAM,OAAO,CAAE;AACf,cAAQ,cAAc,CAAC,SAAS;AAC9B,cAAMA,QAAO,eAAe,KAAK,WAAW;AAC5C,gBAAQA,OAAM,CAAC,YAAY;AACzB,eAAK,OAAO,IAAI;AAAA,QAC1B,CAAS;AAAA,MACT,CAAO;AACD,aAAO;AAAA,IACb,CAAK;AACD,QAAI,UAAU;AAEd,aAAS,aAAa,GAAG,cAAc,GAAG,cAAc;AACtD,YAAM,cAAc;AACpB,gBAAU,wBAAwB,YAAY,MAAM;AAEpD,eAAS,SAAS,GAAG,SAAS,YAAY,QAAQ,UAAU;AAC1D,cAAM,0BAA0B,YAAY,MAAM;AAElD,iBAAS,cAAc,GAAG,cAAc,wBAAwB,QAAQ,eAAe;AACrF,gBAAM,iBAAiB,wBAAwB,WAAW,EAAE;AAC5D,gBAAM,YAAY,wBAAwB,WAAW,EAAE;AACvD,gBAAM,aAAa,eAAe,cAAc;AAChD,gBAAM,WAAW,mBAAmB,YAAY,YAAY,MAAM;AAElE,cAAI,YAAY,QAAQ,SAAS,KAAK,eAAe,WAAW,GAAG;AACjE,kBAAM,gBAAgB,YAAY,MAAM;AAExC,gBAAI,aAAa,eAAe,cAAc,MAAM,OAAO;AACzD,4BAAc,KAAK,cAAc;AAEjC,uBAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAC1C,sBAAM,UAAU,WAAW,CAAC;AAC5B,2BAAW,MAAM,EAAE,OAAO,IAAI;AAAA,cAC/B;AAAA,YACF;AAAA,UACF,OAEI;AACH,kBAAM,6BAA6B,kBAAkB,WAAW,aAAa,GAAG,cAAc;AAC9F,oBAAQ,MAAM,IAAI,QAAQ,MAAM,EAAE,OAAO,0BAA0B;AAEnE,oBAAQ,4BAA4B,CAAC,SAAS;AAC5C,oBAAMC,cAAa,eAAe,KAAK,WAAW;AAClD,sBAAQA,aAAY,CAAC,QAAQ;AAC3B,2BAAW,MAAM,EAAE,GAAG,IAAI;AAAA,cAC1C,CAAe;AAAA,YACf,CAAa;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACD,WAAO;AAAA,EACR;AACD,WAAS,uBAAuB,YAAY,aAAa,GAAG,QAAQ;AAClE,UAAM,UAAU,IAAI,8BAA8B,YAAY,UAAU,aAAa,MAAM;AAC3F,gBAAY,OAAO,OAAO;AAC1B,WAAO,kCAAkC,QAAQ,QAAQ,CAAC;AAAA,EAC3D;AACD,WAAS,iCAAiC,YAAY,aAAa,UAAU,GAAG;AAC9E,UAAM,mBAAmB,IAAI,8BAA8B,YAAY,QAAQ;AAC/E,gBAAY,OAAO,gBAAgB;AACnC,UAAM,YAAY,iBAAiB;AACnC,UAAM,iBAAiB,IAAI,2BAA2B,aAAa,YAAY,QAAQ;AACvF,UAAM,WAAW,eAAe,aAAc;AAC9C,UAAM,aAAa,IAAI,YAAY,EAAE,YAAY,UAAS,CAAE;AAC5D,UAAM,YAAY,IAAI,YAAY,EAAE,YAAY,SAAQ,CAAE;AAC1D,WAAO,kCAAkC,CAAC,YAAY,SAAS,GAAG,CAAC;AAAA,EACpE;AACD,WAAS,aAAa,aAAa,YAAY;AAC7C;AAAkB,eAAS,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;AAC7D,cAAM,YAAY,YAAY,CAAC;AAC/B,YAAI,UAAU,WAAW,WAAW,QAAQ;AAC1C;AAAA,QACD;AACD,iBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,gBAAM,YAAY,WAAW,CAAC;AAC9B,gBAAM,WAAW,UAAU,CAAC;AAC5B,gBAAM,iBACJ,cAAc,YAAY,SAAS,mBAAmB,UAAU,YAAY,MAAM;AACpF,cAAI,mBAAmB,OAAO;AAC5B,qBAAS;AAAA,UACV;AAAA,QACF;AACD,eAAO;AAAA,MACR;AACD,WAAO;AAAA,EACR;AACD,WAAS,qBAAqB,QAAQ,OAAO;AAC3C,WACE,OAAO,SAAS,MAAM,UACtB,MAAM,QAAQ,CAAC,SAAS,QAAQ;AAC9B,YAAM,eAAe,MAAM,GAAG;AAC9B,aAAO,YAAY,gBAAgB,aAAa,mBAAmB,QAAQ,YAAY;AAAA,IAC/F,CAAO;AAAA,EAEJ;AACD,WAAS,0BAA0B,gBAAgB;AACjD,WAAO;AAAA,MAAM;AAAA,MAAgB,CAAC,mBAC5B,MAAM,gBAAgB,CAAC,eAAe,MAAM,YAAY,CAAC,UAAU,QAAQ,MAAM,eAAe,CAAC,CAAC;AAAA,IACnG;AAAA,EACF;AAED,WAAS,kBAAkB,SAAS;AAClC,UAAM,mCAAmC,QAAQ,kBAAkB,SAAS;AAAA,MAC1E,OAAO,QAAQ;AAAA,MACf,YAAY,QAAQ;AAAA,MACpB,aAAa,QAAQ;AAAA,IAC3B,CAAK;AACD,WAAO;AAAA,MAAI;AAAA,MAAkC,CAAC,iBAC5C,OAAO,OAAO,EAAE,MAAM,0BAA0B,4BAA6B,GAAE,YAAY;AAAA,IAC5F;AAAA,EACF;AACD,WAAS,kBAAkB,WAAW,YAAY,gBAAgB,aAAa;AAC7E,UAAM,kBAAkB;AAAA,MAAQ;AAAA,MAAW,CAAC,iBAC1C,6BAA6B,cAAc,cAAc;AAAA,IAC1D;AACD,UAAM,+BAA+B,uCAAuC,WAAW,YAAY,cAAc;AACjH,UAAM,oBAAoB,QAAQ,WAAW,CAAC,YAAY,oBAAoB,SAAS,cAAc,CAAC;AACtG,UAAM,sBAAsB;AAAA,MAAQ;AAAA,MAAW,CAAC,YAC9C,gCAAgC,SAAS,WAAW,aAAa,cAAc;AAAA,IAChF;AACD,WAAO,gBAAgB,OAAO,8BAA8B,mBAAmB,mBAAmB;AAAA,EACnG;AACD,WAAS,6BAA6B,cAAc,gBAAgB;AAClE,UAAMC,oBAAmB,IAAI,8BAA+B;AAC5D,iBAAa,OAAOA,iBAAgB;AACpC,UAAM,qBAAqBA,kBAAiB;AAC5C,UAAM,mBAAmB,UAAU,oBAAoB,+BAA+B;AACtF,UAAM,aAAa,OAAO,kBAAkB,CAAC,cAAc;AACzD,aAAO,UAAU,SAAS;AAAA,IAChC,CAAK;AACD,UAAM,SAAS,IAAI,OAAO,UAAU,GAAG,CAAC,mBAAmB;AACzD,YAAM,YAAY,KAAK,cAAc;AACrC,YAAM,MAAM,eAAe,yBAAyB,cAAc,cAAc;AAChF,YAAM,UAAU,qBAAqB,SAAS;AAC9C,YAAM,WAAW;AAAA,QACf,SAAS;AAAA,QACT,MAAM,0BAA0B;AAAA,QAChC,UAAU,aAAa;AAAA,QACvB;AAAA,QACA,YAAY,UAAU;AAAA,MACvB;AACD,YAAM,QAAQ,2BAA2B,SAAS;AAClD,UAAI,OAAO;AACT,iBAAS,YAAY;AAAA,MACtB;AACD,aAAO;AAAA,IACb,CAAK;AACD,WAAO;AAAA,EACR;AACD,WAAS,gCAAgC,MAAM;AAC7C,WAAO,GAAG,qBAAqB,IAAI,OAAO,KAAK,SAAS,2BAA2B,IAAI;AAAA,EACxF;AACD,WAAS,2BAA2B,MAAM;AACxC,QAAI,gBAAgB,UAAU;AAC5B,aAAO,KAAK,aAAa;AAAA,IAC/B,WAAe,gBAAgB,aAAa;AACtC,aAAO,KAAK;AAAA,IAClB,OAAW;AACL,aAAO;AAAA,IACR;AAAA,EACF;AACD,QAAM,sCAAsC,YAAY;AAAA,IACtD,cAAc;AACZ,YAAM,GAAG,SAAS;AAClB,WAAK,iBAAiB,CAAE;AAAA,IACzB;AAAA,IACD,iBAAiB,SAAS;AACxB,WAAK,eAAe,KAAK,OAAO;AAAA,IACjC;AAAA,IACD,YAAY,QAAQ;AAClB,WAAK,eAAe,KAAK,MAAM;AAAA,IAChC;AAAA,IACD,6BAA6B,SAAS;AACpC,WAAK,eAAe,KAAK,OAAO;AAAA,IACjC;AAAA,IACD,yBAAyB,YAAY;AACnC,WAAK,eAAe,KAAK,UAAU;AAAA,IACpC;AAAA,IACD,sCAAsC,eAAe;AACnD,WAAK,eAAe,KAAK,aAAa;AAAA,IACvC;AAAA,IACD,gBAAgB,MAAM;AACpB,WAAK,eAAe,KAAK,IAAI;AAAA,IAC9B;AAAA,IACD,iBAAiB,IAAI;AACnB,WAAK,eAAe,KAAK,EAAE;AAAA,IAC5B;AAAA,IACD,cAAc,UAAU;AACtB,WAAK,eAAe,KAAK,QAAQ;AAAA,IAClC;AAAA,EACF;AACD,WAAS,gCAAgC,MAAM,UAAU,WAAW,gBAAgB;AAClF,UAAM,SAAS,CAAE;AACjB,UAAM,cAAc;AAAA,MAClB;AAAA,MACA,CAAC,QAAQ,YAAY;AACnB,YAAI,QAAQ,SAAS,KAAK,MAAM;AAC9B,iBAAO,SAAS;AAAA,QACjB;AACD,eAAO;AAAA,MACR;AAAA,MACD;AAAA,IACD;AACD,QAAI,cAAc,GAAG;AACnB,YAAM,SAAS,eAAe,4BAA4B;AAAA,QACxD,cAAc;AAAA,QACd,aAAa;AAAA,MACrB,CAAO;AACD,aAAO,KAAK;AAAA,QACV,SAAS;AAAA,QACT,MAAM,0BAA0B;AAAA,QAChC,UAAU,KAAK;AAAA,MACvB,CAAO;AAAA,IACF;AACD,WAAO;AAAA,EACR;AAID,WAAS,yBAAyB,UAAU,mBAAmB,WAAW;AACxE,UAAM,SAAS,CAAE;AACjB,QAAI;AACJ,QAAI,CAAC,SAAS,mBAAmB,QAAQ,GAAG;AAC1C,eACE,kCAAkC,qDAAqD;AAEzF,aAAO,KAAK;AAAA,QACV,SAAS;AAAA,QACT,MAAM,0BAA0B;AAAA,QAChC;AAAA,MACR,CAAO;AAAA,IACF;AACD,WAAO;AAAA,EACR;AACD,WAAS,wBAAwB,SAAS,UAAU,gBAAgB,OAAO,CAAA,GAAI;AAC7E,UAAM,SAAS,CAAE;AACjB,UAAM,mBAAmB,qBAAqB,SAAS,UAAU;AACjE,QAAI,QAAQ,gBAAgB,GAAG;AAC7B,aAAO,CAAE;AAAA,IACf,OAAW;AACL,YAAM,WAAW,QAAQ;AACzB,YAAM,qBAAqB,SAAS,kBAAkB,OAAO;AAC7D,UAAI,oBAAoB;AACtB,eAAO,KAAK;AAAA,UACV,SAAS,eAAe,wBAAwB;AAAA,YAC9C,cAAc;AAAA,YACd,mBAAmB;AAAA,UAC/B,CAAW;AAAA,UACD,MAAM,0BAA0B;AAAA,UAChC;AAAA,QACV,CAAS;AAAA,MACF;AAGD,YAAM,iBAAiB,aAAa,kBAAkB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAC5E,YAAM,sBAAsB,QAAQ,gBAAgB,CAAC,gBAAgB;AACnE,cAAM,UAAU,MAAM,IAAI;AAC1B,gBAAQ,KAAK,WAAW;AACxB,eAAO,wBAAwB,SAAS,aAAa,gBAAgB,OAAO;AAAA,MACpF,CAAO;AACD,aAAO,OAAO,OAAO,mBAAmB;AAAA,IACzC;AAAA,EACF;AACD,WAAS,qBAAqB,YAAY;AACxC,QAAI,SAAS,CAAE;AACf,QAAI,QAAQ,UAAU,GAAG;AACvB,aAAO;AAAA,IACR;AACD,UAAM,YAAY,KAAK,UAAU;AAEjC,QAAI,qBAAqB,aAAa;AACpC,aAAO,KAAK,UAAU,cAAc;AAAA,IAC1C,WACM,qBAAqB,eACrB,qBAAqB,UACrB,qBAAqB,uBACrB,qBAAqB,oCACrB,qBAAqB,2BACrB,qBAAqB,YACrB;AACA,eAAS,OAAO,OAAO,qBAAqB,UAAU,UAAU,CAAC;AAAA,IACvE,WAAe,qBAAqB,aAAa;AAE3C,eAAS,QAAQ,IAAI,UAAU,YAAY,CAAC,eAAe,qBAAqB,WAAW,UAAU,CAAC,CAAC;AAAA,IAC7G,WAAe,qBAAqB;AAAS;AAAA,SACpC;AACH,YAAM,MAAM,sBAAsB;AAAA,IACnC;AACD,UAAM,kBAAkB,eAAe,SAAS;AAChD,UAAM,UAAU,WAAW,SAAS;AACpC,QAAI,mBAAmB,SAAS;AAC9B,YAAM,OAAO,KAAK,UAAU;AAC5B,aAAO,OAAO,OAAO,qBAAqB,IAAI,CAAC;AAAA,IACrD,OAAW;AACL,aAAO;AAAA,IACR;AAAA,EACF;AACD,QAAM,oBAAoB,YAAY;AAAA,IACpC,cAAc;AACZ,YAAM,GAAG,SAAS;AAClB,WAAK,eAAe,CAAE;AAAA,IACvB;AAAA,IACD,iBAAiB,MAAM;AACrB,WAAK,aAAa,KAAK,IAAI;AAAA,IAC5B;AAAA,EACF;AACD,WAAS,2BAA2B,cAAc,gBAAgB;AAChE,UAAM,cAAc,IAAI,YAAa;AACrC,iBAAa,OAAO,WAAW;AAC/B,UAAM,MAAM,YAAY;AACxB,UAAM,SAAS,QAAQ,KAAK,CAAC,WAAW;AACtC,YAAM,aAAa,UAAU,OAAO,UAAU;AAC9C,aAAO,QAAQ,YAAY,CAAC,iBAAiB,eAAe;AAC1D,cAAM,qBAAqB,wBAAwB,CAAC,eAAe,GAAG,CAAE,GAAE,wBAAwB,CAAC;AACnG,YAAI,QAAQ,kBAAkB,GAAG;AAC/B,iBAAO;AAAA,YACL;AAAA,cACE,SAAS,eAAe,2BAA2B;AAAA,gBACjD;AAAA,gBACA,aAAa;AAAA,gBACb,gBAAgB;AAAA,cAChC,CAAe;AAAA,cACD,MAAM,0BAA0B;AAAA,cAChC,UAAU,aAAa;AAAA,cACvB,YAAY,OAAO;AAAA,cACnB,aAAa,aAAa;AAAA,YAC3B;AAAA,UACF;AAAA,QACX,OAAe;AACL,iBAAO,CAAE;AAAA,QACV;AAAA,MACT,CAAO;AAAA,IACP,CAAK;AACD,WAAO;AAAA,EACR;AACD,WAAS,yCAAyC,cAAc,oBAAoB,gBAAgB;AAClG,UAAM,cAAc,IAAI,YAAa;AACrC,iBAAa,OAAO,WAAW;AAC/B,QAAI,MAAM,YAAY;AAGtB,UAAM,OAAO,KAAK,CAAC,WAAW,OAAO,sBAAsB,IAAI;AAC/D,UAAM,SAAS,QAAQ,KAAK,CAAC,WAAW;AACtC,YAAM,iBAAiB,OAAO;AAC9B,YAAM,qBAAqB,OAAO,gBAAgB;AAClD,YAAM,eAAe,uBAAuB,gBAAgB,cAAc,oBAAoB,MAAM;AACpG,YAAM,sBAAsB,6BAA6B,cAAc,QAAQ,cAAc,cAAc;AAC3G,YAAM,4BAA4B;AAAA,QAChC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD;AACD,aAAO,oBAAoB,OAAO,yBAAyB;AAAA,IACjE,CAAK;AACD,WAAO;AAAA,EACR;AACD,QAAM,4BAA4B,YAAY;AAAA,IAC5C,cAAc;AACZ,YAAM,GAAG,SAAS;AAClB,WAAK,iBAAiB,CAAE;AAAA,IACzB;AAAA,IACD,6BAA6B,SAAS;AACpC,WAAK,eAAe,KAAK,OAAO;AAAA,IACjC;AAAA,IACD,yBAAyB,YAAY;AACnC,WAAK,eAAe,KAAK,UAAU;AAAA,IACpC;AAAA,IACD,sCAAsC,eAAe;AACnD,WAAK,eAAe,KAAK,aAAa;AAAA,IACvC;AAAA,IACD,gBAAgB,MAAM;AACpB,WAAK,eAAe,KAAK,IAAI;AAAA,IAC9B;AAAA,EACF;AACD,WAAS,oBAAoB,cAAc,gBAAgB;AACzD,UAAM,cAAc,IAAI,YAAa;AACrC,iBAAa,OAAO,WAAW;AAC/B,UAAM,MAAM,YAAY;AACxB,UAAM,SAAS,QAAQ,KAAK,CAAC,WAAW;AACtC,UAAI,OAAO,WAAW,SAAS,KAAK;AAClC,eAAO;AAAA,UACL;AAAA,YACE,SAAS,eAAe,8BAA8B;AAAA,cACpD;AAAA,cACA,aAAa;AAAA,YAC3B,CAAa;AAAA,YACD,MAAM,0BAA0B;AAAA,YAChC,UAAU,aAAa;AAAA,YACvB,YAAY,OAAO;AAAA,UACpB;AAAA,QACF;AAAA,MACT,OAAa;AACL,eAAO,CAAE;AAAA,MACV;AAAA,IACP,CAAK;AACD,WAAO;AAAA,EACR;AACD,WAAS,kCAAkC,eAAe,cAAc,gBAAgB;AACtF,UAAM,SAAS,CAAE;AACjB,YAAQ,eAAe,CAAC,gBAAgB;AACtC,YAAMA,oBAAmB,IAAI,oBAAqB;AAClD,kBAAY,OAAOA,iBAAgB;AACnC,YAAM,qBAAqBA,kBAAiB;AAC5C,cAAQ,oBAAoB,CAAC,aAAa;AACxC,cAAM,WAAW,YAAY,QAAQ;AACrC,cAAM,qBAAqB,SAAS,gBAAgB;AACpD,cAAM,iBAAiB,SAAS;AAChC,cAAM,QAAQ,iCAAiC,gBAAgB,aAAa,UAAU,kBAAkB;AACxG,cAAM,wBAAwB,MAAM,CAAC;AACrC,YAAI,QAAQ,QAAQ,qBAAqB,CAAC,GAAG;AAC3C,gBAAM,SAAS,eAAe,0BAA0B;AAAA,YACtD,cAAc;AAAA,YACd,YAAY;AAAA,UACxB,CAAW;AACD,iBAAO,KAAK;AAAA,YACV,SAAS;AAAA,YACT,MAAM,0BAA0B;AAAA,YAChC,UAAU,YAAY;AAAA,UAClC,CAAW;AAAA,QACF;AAAA,MACT,CAAO;AAAA,IACP,CAAK;AACD,WAAO;AAAA,EACR;AACD,WAAS,6BAA6B,cAAc,aAAa,MAAM,gBAAgB;AACrF,UAAM,sBAAsB,CAAE;AAC9B,UAAM,uBAAuB;AAAA,MAC3B;AAAA,MACA,CAAC,QAAQ,SAAS,eAAe;AAE/B,YAAI,YAAY,WAAW,UAAU,EAAE,sBAAsB,MAAM;AACjE,iBAAO;AAAA,QACR;AACD,gBAAQ,SAAS,CAAC,aAAa;AAC7B,gBAAM,wBAAwB,CAAC,UAAU;AACzC,kBAAQ,cAAc,CAAC,cAAc,oBAAoB;AACvD,gBACE,eAAe,mBACf,aAAa,cAAc,QAAQ;AAAA,YAEnC,YAAY,WAAW,eAAe,EAAE,sBAAsB,MAC9D;AACA,oCAAsB,KAAK,eAAe;AAAA,YAC3C;AAAA,UACb,CAAW;AACD,cAAI,sBAAsB,SAAS,KAAK,CAAC,aAAa,qBAAqB,QAAQ,GAAG;AACpF,gCAAoB,KAAK,QAAQ;AACjC,mBAAO,KAAK;AAAA,cACV,MAAM;AAAA,cACN,MAAM;AAAA,YACpB,CAAa;AAAA,UACF;AAAA,QACX,CAAS;AACD,eAAO;AAAA,MACR;AAAA,MACD,CAAE;AAAA,IACH;AACD,UAAM,aAAa,IAAI,sBAAsB,CAAC,sBAAsB;AAClE,YAAM,cAAc,IAAI,kBAAkB,MAAM,CAAC,eAAe,aAAa,CAAC;AAC9E,YAAM,cAAc,eAAe,+BAA+B;AAAA,QAChE,cAAc;AAAA,QACd;AAAA,QACA,kBAAkB;AAAA,QAClB,YAAY,kBAAkB;AAAA,MACtC,CAAO;AACD,aAAO;AAAA,QACL,SAAS;AAAA,QACT,MAAM,0BAA0B;AAAA,QAChC,UAAU,KAAK;AAAA,QACf,YAAY,YAAY;AAAA,QACxB,cAAc,kBAAkB;AAAA,MACjC;AAAA,IACP,CAAK;AACD,WAAO;AAAA,EACR;AACD,WAAS,mCAAmC,cAAc,aAAa,MAAM,gBAAgB;AAE3F,UAAM,kBAAkB;AAAA,MACtB;AAAA,MACA,CAAC,QAAQ,SAAS,QAAQ;AACxB,cAAM,kBAAkB,IAAI,SAAS,CAAC,aAAa;AACjD,iBAAO,EAAE,KAAU,MAAM,SAAU;AAAA,QAC7C,CAAS;AACD,eAAO,OAAO,OAAO,eAAe;AAAA,MACrC;AAAA,MACD,CAAE;AAAA,IACH;AACD,UAAM,SAAS;AAAA,MACb,QAAQ,iBAAiB,CAAC,mBAAmB;AAC3C,cAAM,kBAAkB,YAAY,WAAW,eAAe,GAAG;AAEjE,YAAI,gBAAgB,sBAAsB,MAAM;AAC9C,iBAAO,CAAE;AAAA,QACV;AACD,cAAM,YAAY,eAAe;AACjC,cAAM,aAAa,eAAe;AAClC,cAAM,mCAAmC,OAAO,iBAAiB,CAAC,qBAAqB;AAErF;AAAA;AAAA,YAEE,YAAY,WAAW,iBAAiB,GAAG,EAAE,sBAAsB,QACnE,iBAAiB,MAAM;AAAA;AAAA,YAGvB,qBAAqB,iBAAiB,MAAM,UAAU;AAAA;AAAA,QAElE,CAAS;AACD,cAAM,uBAAuB,IAAI,kCAAkC,CAAC,sBAAsB;AACxF,gBAAM,cAAc,CAAC,kBAAkB,MAAM,GAAG,YAAY,CAAC;AAC7D,gBAAM,aAAa,YAAY,QAAQ,IAAI,KAAK,YAAY;AAC5D,gBAAM,UAAU,eAAe,qCAAqC;AAAA,YAClE,cAAc;AAAA,YACd;AAAA,YACA,kBAAkB;AAAA,YAClB,YAAY,kBAAkB;AAAA,UAC1C,CAAW;AACD,iBAAO;AAAA,YACL;AAAA,YACA,MAAM,0BAA0B;AAAA,YAChC,UAAU,KAAK;AAAA,YACf;AAAA,YACA,cAAc;AAAA,UACf;AAAA,QACX,CAAS;AACD,eAAO;AAAA,MACf,CAAO;AAAA,IACF;AACD,WAAO;AAAA,EACR;AACD,WAAS,uCAAuC,WAAW,YAAY,gBAAgB;AACrF,UAAM,SAAS,CAAE;AACjB,UAAM,aAAa,IAAI,YAAY,CAAC,cAAc,UAAU,IAAI;AAChE,YAAQ,WAAW,CAAC,aAAa;AAC/B,YAAM,eAAe,SAAS;AAC9B,UAAI,SAAS,YAAY,YAAY,GAAG;AACtC,cAAM,SAAS,eAAe,4BAA4B,QAAQ;AAClE,eAAO,KAAK;AAAA,UACV,SAAS;AAAA,UACT,MAAM,0BAA0B;AAAA,UAChC,UAAU;AAAA,QACpB,CAAS;AAAA,MACF;AAAA,IACP,CAAK;AACD,WAAO;AAAA,EACR;AAED,WAAS,eAAe,SAAS;AAC/B,UAAM,gBAAgB,WAAW,SAAS;AAAA,MACxC,gBAAgB;AAAA,IACtB,CAAK;AACD,UAAM,gBAAgB,CAAE;AACxB,YAAQ,QAAQ,OAAO,CAAC,SAAS;AAC/B,oBAAc,KAAK,IAAI,IAAI;AAAA,IACjC,CAAK;AACD,WAAO,iBAAiB,eAAe,cAAc,cAAc;AAAA,EACpE;AACD,WAAS,gBAAgB,SAAS;AAChC,cAAU,WAAW,SAAS;AAAA,MAC5B,gBAAgB;AAAA,IACtB,CAAK;AACD,WAAO,kBAAkB,QAAQ,OAAO,QAAQ,YAAY,QAAQ,gBAAgB,QAAQ,WAAW;AAAA,EACxG;AAED,QAAM,6BAA6B;AACnC,QAAM,0BAA0B;AAChC,QAAM,uBAAuB;AAC7B,QAAM,iCAAiC;AACvC,QAAM,8BAA8B;AAAA,IAClC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD,SAAO,OAAO,2BAA2B;AAEzC,WAAS,uBAAuB,OAAO;AAErC,WAAO,SAAS,6BAA6B,MAAM,IAAI;AAAA,EACxD;AACD,QAAM,6BAA6B,MAAM;AAAA,IACvC,YAAY,SAAS,OAAO;AAC1B,YAAM,OAAO;AACb,WAAK,QAAQ;AACb,WAAK,iBAAiB,CAAE;AAExB,aAAO,eAAe,MAAM,WAAW,SAAS;AAEhD,UAAI,MAAM,mBAAmB;AAC3B,cAAM,kBAAkB,MAAM,KAAK,WAAW;AAAA,MAC/C;AAAA,IACF;AAAA,EACF;AACD,QAAM,iCAAiC,qBAAqB;AAAA,IAC1D,YAAY,SAAS,OAAO,eAAe;AACzC,YAAM,SAAS,KAAK;AACpB,WAAK,gBAAgB;AACrB,WAAK,OAAO;AAAA,IACb;AAAA,EACF;AACD,QAAM,6BAA6B,qBAAqB;AAAA,IACtD,YAAY,SAAS,OAAO,eAAe;AACzC,YAAM,SAAS,KAAK;AACpB,WAAK,gBAAgB;AACrB,WAAK,OAAO;AAAA,IACb;AAAA,EACF;AACD,QAAM,mCAAmC,qBAAqB;AAAA,IAC5D,YAAY,SAAS,OAAO;AAC1B,YAAM,SAAS,KAAK;AACpB,WAAK,OAAO;AAAA,IACb;AAAA,EACF;AACD,QAAM,2BAA2B,qBAAqB;AAAA,IACpD,YAAY,SAAS,OAAO,eAAe;AACzC,YAAM,SAAS,KAAK;AACpB,WAAK,gBAAgB;AACrB,WAAK,OAAO;AAAA,IACb;AAAA,EACF;AAED,QAAM,iBAAiB,CAAE;AACzB,QAAM,6BAA6B;AACnC,QAAM,gCAAgC,MAAM;AAAA,IAC1C,YAAY,SAAS;AACnB,YAAM,OAAO;AACb,WAAK,OAAO;AAAA,IACb;AAAA,EACF;AAID,QAAM,YAAY;AAAA,IAChB,gBAAgB,QAAQ;AACtB,WAAK,mBAAmB,CAAE;AAC1B,WAAK,gBAAgB,CAAE;AACvB,WAAK,kBAAkB,IAAI,QAAQ,iBAAiB,IAChD,OAAO,kBACP,sBAAsB;AAI1B,UAAI,KAAK,iBAAiB;AACxB,aAAK,8BAA8B;AAAA,MACpC;AAAA,IACF;AAAA,IACD,iBAAiB,SAAS;AACxB,YAAM,cAAc,oBAAoB,SAAS,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AACjF,kBAAY,uBAAuB;AACnC,aAAO;AAAA,IACR;AAAA,IACD,iCAAiC,SAAS;AACxC,aAAO;AAAA,IACR;AAAA,IACD,gCAAgC,SAAS;AACvC,aAAO;AAAA,IACR;AAAA,IACD,wBAAwB,aAAa,iBAAiB,eAAe,iBAAiB;AAEpF,YAAM,gBAAgB,KAAK,oBAAqB;AAChD,YAAM,kBAAkB,KAAK,iBAAkB;AAC/C,YAAM,iBAAiB,CAAE;AACzB,UAAI,oBAAoB;AACxB,YAAM,yBAAyB,KAAK,GAAG,CAAC;AACxC,UAAI,YAAY,KAAK,GAAG,CAAC;AACzB,YAAM,uBAAuB,MAAM;AACjC,cAAM,gBAAgB,KAAK,GAAG,CAAC;AAG/B,cAAM,MAAM,KAAK,qBAAqB,0BAA0B;AAAA,UAC9D,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,UAAU;AAAA,UACV,UAAU,KAAK,oBAAqB;AAAA,QAC9C,CAAS;AACD,cAAM,QAAQ,IAAI,yBAAyB,KAAK,wBAAwB,KAAK,GAAG,CAAC,CAAC;AAElF,cAAM,iBAAiB,UAAU,cAAc;AAC/C,aAAK,WAAW,KAAK;AAAA,MACtB;AACD,aAAO,CAAC,mBAAmB;AAEzB,YAAI,KAAK,aAAa,WAAW,eAAe,GAAG;AACjD,+BAAsB;AACtB;AAAA,QACD,WAAU,cAAc,KAAK,IAAI,GAAG;AAEnC,+BAAsB;AAEtB,sBAAY,MAAM,MAAM,eAAe;AACvC;AAAA,QACD,WAAU,KAAK,aAAa,WAAW,aAAa,GAAG;AACtD,8BAAoB;AAAA,QAC9B,OAAe;AACL,sBAAY,KAAK,WAAY;AAC7B,eAAK,kBAAkB,WAAW,cAAc;AAAA,QACjD;AAAA,MACF;AAID,WAAK,iBAAiB,eAAe;AAAA,IACtC;AAAA,IACD,kCAAkC,yBAAyB,YAAY,UAAU;AAG/E,UAAI,aAAa,OAAO;AACtB,eAAO;AAAA,MACR;AAED,UAAI,KAAK,aAAa,KAAK,GAAG,CAAC,GAAG,uBAAuB,GAAG;AAC1D,eAAO;AAAA,MACR;AAGD,UAAI,KAAK,kBAAkB;AACzB,eAAO;AAAA,MACR;AAID,UACE,KAAK;AAAA,QACH;AAAA,QACA,KAAK,4BAA4B,yBAAyB,UAAU;AAAA,MACrE,GACD;AACA,eAAO;AAAA,MACR;AACD,aAAO;AAAA,IACR;AAAA;AAAA,IAED,4BAA4B,SAAS,cAAc;AACjD,YAAM,cAAc,KAAK,sBAAsB,SAAS,YAAY;AACpE,YAAM,UAAU,KAAK,0BAA0B,WAAW;AAC1D,aAAO;AAAA,IACR;AAAA,IACD,kBAAkB,iBAAiB,SAAS;AAC1C,UAAI,KAAK,mCAAmC,iBAAiB,OAAO,GAAG;AACrE,cAAM,cAAc,KAAK,iBAAiB,eAAe;AACzD,eAAO;AAAA,MACR;AACD,UAAI,KAAK,kCAAkC,eAAe,GAAG;AAC3D,cAAM,UAAU,KAAK,WAAY;AACjC,aAAK,aAAc;AACnB,eAAO;AAAA,MACR;AACD,YAAM,IAAI,wBAAwB,eAAe;AAAA,IAClD;AAAA,IACD,yBAAyB,eAAe,SAAS;AAC/C,aACE,KAAK,mCAAmC,eAAe,OAAO,KAC9D,KAAK,kCAAkC,aAAa;AAAA,IAEvD;AAAA,IACD,mCAAmC,iBAAiB,SAAS;AAC3D,UAAI,CAAC,KAAK,iCAAiC,eAAe,GAAG;AAC3D,eAAO;AAAA,MACR;AAED,UAAI,QAAQ,OAAO,GAAG;AACpB,eAAO;AAAA,MACR;AACD,YAAM,gBAAgB,KAAK,GAAG,CAAC;AAC/B,YAAM,2BACJ,OAAO,SAAS,CAAC,2BAA2B;AAC1C,eAAO,KAAK,aAAa,eAAe,sBAAsB;AAAA,MAC/D,CAAA,MAAM;AACT,aAAO;AAAA,IACR;AAAA,IACD,kCAAkC,iBAAiB;AACjD,UAAI,CAAC,KAAK,gCAAgC,eAAe,GAAG;AAC1D,eAAO;AAAA,MACR;AACD,YAAM,4BAA4B,KAAK,aAAa,KAAK,GAAG,CAAC,GAAG,eAAe;AAC/E,aAAO;AAAA,IACR;AAAA,IACD,yBAAyB,cAAc;AACrC,YAAM,YAAY,KAAK,iBAAkB;AACzC,YAAM,uBAAuB,KAAK,0BAA0B,SAAS;AACrE,aAAO,SAAS,sBAAsB,YAAY;AAAA,IACnD;AAAA,IACD,sBAAsB;AACpB,YAAM,4BAA4B,KAAK,iBAAkB;AAEzD,UAAI,YAAY,KAAK,GAAG,CAAC;AACzB,UAAI,IAAI;AACR,aAAO,MAAM;AACX,cAAM,aAAa,OAAO,2BAA2B,CAAC,kBAAkB;AACtE,gBAAM,WAAW,aAAa,WAAW,aAAa;AACtD,iBAAO;AAAA,QACjB,CAAS;AACD,YAAI,eAAe,QAAW;AAC5B,iBAAO;AAAA,QACR;AACD,oBAAY,KAAK,GAAG,CAAC;AACrB;AAAA,MACD;AAAA,IACF;AAAA,IACD,mBAAmB;AAEjB,UAAI,KAAK,WAAW,WAAW,GAAG;AAChC,eAAO;AAAA,MACR;AACD,YAAM,oBAAoB,KAAK,6BAA8B;AAC7D,YAAM,cAAc,KAAK,mCAAoC;AAC7D,YAAM,oBAAoB,KAAK,iCAAkC;AACjE,aAAO;AAAA,QACL,UAAU,KAAK,wBAAwB,iBAAiB;AAAA,QACxD,kBAAkB;AAAA,QAClB,QAAQ,KAAK,wBAAwB,iBAAiB;AAAA,MACvD;AAAA,IACF;AAAA,IACD,0BAA0B;AACxB,YAAM,oBAAoB,KAAK;AAC/B,YAAM,0BAA0B,KAAK;AACrC,aAAO,IAAI,mBAAmB,CAAC,UAAU,QAAQ;AAC/C,YAAI,QAAQ,GAAG;AACb,iBAAO;AAAA,QACR;AACD,eAAO;AAAA,UACL,UAAU,KAAK,wBAAwB,QAAQ;AAAA,UAC/C,kBAAkB,wBAAwB,GAAG;AAAA,UAC7C,QAAQ,KAAK,wBAAwB,kBAAkB,MAAM,CAAC,CAAC;AAAA,QAChE;AAAA,MACT,CAAO;AAAA,IACF;AAAA,IACD,mBAAmB;AACjB,YAAM,cAAc,IAAI,KAAK,wBAAyB,GAAE,CAAC,YAAY;AACnE,eAAO,KAAK,0BAA0B,OAAO;AAAA,MACrD,CAAO;AACD,aAAO,QAAQ,WAAW;AAAA,IAC3B;AAAA,IACD,0BAA0B,WAAW;AACnC,UAAI,cAAc,gBAAgB;AAChC,eAAO,CAAC,GAAG;AAAA,MACZ;AACD,YAAM,aAAa,UAAU,WAAW,UAAU,mBAAmB,KAAK,UAAU;AACpF,aAAO,KAAK,cAAc,UAAU;AAAA,IACrC;AAAA;AAAA;AAAA,IAGD,kBAAkB,OAAO,cAAc;AACrC,UAAI,CAAC,KAAK,aAAa,OAAO,GAAG,GAAG;AAClC,qBAAa,KAAK,KAAK;AAAA,MACxB;AACD,aAAO;AAAA,IACR;AAAA,IACD,SAAS,SAAS;AAChB,YAAM,iBAAiB,CAAE;AACzB,UAAI,UAAU,KAAK,GAAG,CAAC;AACvB,aAAO,KAAK,aAAa,SAAS,OAAO,MAAM,OAAO;AACpD,kBAAU,KAAK,WAAY;AAC3B,aAAK,kBAAkB,SAAS,cAAc;AAAA,MAC/C;AAED,aAAO,UAAU,cAAc;AAAA,IAChC;AAAA,IACD,4BAA4B,UAAU,MAAM,eAAe,cAAc,gBAAgB,gBAAgB,UAAU;AAAA,IAGlH;AAAA,IACD,sBAAsB,SAAS,cAAc;AAC3C,YAAM,gBAAgB,KAAK,0BAA2B;AACtD,YAAM,sBAAsB,MAAM,KAAK,qBAAqB;AAC5D,YAAM,cAAc;AAAA,QAClB,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,SAAS;AAAA,QACT,mBAAmB;AAAA,MACpB;AACD,aAAO;AAAA,IACR;AAAA,IACD,4BAA4B;AAC1B,aAAO,IAAI,KAAK,YAAY,CAAC,kBAAkB,KAAK,wBAAwB,aAAa,CAAC;AAAA,IAC3F;AAAA,EACF;AACD,WAAS,4BACP,UACA,MACA,eACA,cACA,gBACA,gBACA,UACA;AACA,UAAM,MAAM,KAAK,4BAA4B,cAAc,cAAc;AACzE,QAAI,oBAAoB,KAAK,iBAAiB,GAAG;AACjD,QAAI,sBAAsB,QAAW;AACnC,YAAM,eAAe,KAAK,oBAAqB;AAC/C,YAAM,cAAc,KAAK,mBAAkB,EAAG,YAAY;AAC1D,YAAM,SAAS,IAAI,eAAe,aAAa,cAAc;AAC7D,0BAAoB,OAAO,aAAc;AACzC,WAAK,iBAAiB,GAAG,IAAI;AAAA,IAC9B;AACD,QAAI,0BAA0B,kBAAkB;AAChD,QAAI,aAAa,kBAAkB;AACnC,UAAM,cAAc,kBAAkB;AAGtC,QAAI,KAAK,WAAW,WAAW,KAAK,eAAe,4BAA4B,QAAW;AACxF,gCAA0B;AAC1B,mBAAa;AAAA,IACd;AAGD,QAAI,4BAA4B,UAAa,eAAe,QAAW;AACrE;AAAA,IACD;AACD,QAAI,KAAK,kCAAkC,yBAAyB,YAAY,QAAQ,GAAG;AAIzF,WAAK,wBAAwB,UAAU,MAAM,eAAe,uBAAuB;AAAA,IACpF;AAAA,EACF;AAQD,QAAM,uBAAuB;AAC7B,QAAM,0BAA0B;AAIhC,QAAM,SAAS,KAAK;AACpB,QAAM,aAAa,KAAK;AACxB,QAAM,WAAW,KAAK;AACtB,QAAM,mBAAmB,KAAK;AAC9B,QAAM,eAAe,KAAK;AAC1B,QAAM,uBAAuB,KAAK;AAElC,WAAS,4BAA4B,SAAS,cAAc,YAAY;AACtE,WAAO,aAAa,eAAe;AAAA,EACpC;AAED,QAAM,qBAAqB;AAAA,IACzB,YAAY,SAAS;AACnB,UAAI;AACJ,WAAK,gBACF,KAAK,YAAY,QAAQ,YAAY,SAAS,SAAS,QAAQ,kBAAkB,QAAQ,OAAO,SAC7F,KACA,sBAAsB;AAAA,IAC7B;AAAA,IACD,SAAS,SAAS;AAChB,YAAM,sBAAsB,KAAK,wBAAwB,QAAQ,KAAK;AACtE,UAAI,QAAQ,mBAAmB,GAAG;AAChC,cAAM,iBAAiB,KAAK,4BAA4B,QAAQ,KAAK;AACrE,cAAM,sBAAsB,KAAK,yCAAyC,QAAQ,OAAO,KAAK,YAAY;AAC1G,cAAM,wBAAwB,KAAK,kCAAkC,QAAQ,OAAO,KAAK,YAAY;AACrG,cAAM,YAAY,CAAC,GAAG,qBAAqB,GAAG,gBAAgB,GAAG,qBAAqB,GAAG,qBAAqB;AAC9G,eAAO;AAAA,MACR;AACD,aAAO;AAAA,IACR;AAAA,IACD,wBAAwB,OAAO;AAC7B,aAAO;AAAA,QAAQ;AAAA,QAAO,CAAC,gBACrB,wBAAwB,aAAa,aAAa,oCAAoC;AAAA,MACvF;AAAA,IACF;AAAA,IACD,4BAA4B,OAAO;AACjC,aAAO;AAAA,QAAQ;AAAA,QAAO,CAAC,gBACrB,2BAA2B,aAAa,oCAAoC;AAAA,MAC7E;AAAA,IACF;AAAA,IACD,yCAAyC,OAAO,cAAc;AAC5D,aAAO;AAAA,QAAQ;AAAA,QAAO,CAAC,gBACrB,yCAAyC,aAAa,cAAc,oCAAoC;AAAA,MACzG;AAAA,IACF;AAAA,IACD,kCAAkC,OAAO,cAAc;AACrD,aAAO,kCAAkC,OAAO,cAAc,oCAAoC;AAAA,IACnG;AAAA,IACD,6BAA6B,SAAS;AACpC,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR;AAAA,MACD;AAAA,IACF;AAAA,IACD,0BAA0B,SAAS;AACjC,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,YAAY,QAAQ,QAAQ;AAAA,QAC5B;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAKD,QAAM,WAAW;AAAA,IACf,eAAe,QAAQ;AACrB,WAAK,uBAAuB,IAAI,QAAQ,sBAAsB,IAC1D,OAAO,uBACP,sBAAsB;AAC1B,WAAK,eAAe,IAAI,QAAQ,cAAc,IAC1C,OAAO,eACP,sBAAsB;AAC1B,WAAK,oBAAoB,IAAI,QAAQ,mBAAmB,IACpD,OAAO,oBACP,IAAI,qBAAqB,EAAE,cAAc,KAAK,aAAY,CAAE;AAChE,WAAK,sBAAsB,oBAAI,IAAK;AAAA,IACrC;AAAA,IACD,6BAA6B,OAAO;AAClC,cAAQ,OAAO,CAAC,aAAa;AAC3B,aAAK,WAAW,GAAG,SAAS,uBAAuB,MAAM;AACvD,gBAAM;AAAA,YACJ;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACZ,IAAc,eAAe,QAAQ;AAC3B,kBAAQ,aAAa,CAAC,aAAa;AACjC,kBAAM,UAAU,SAAS,QAAQ,IAAI,KAAK,SAAS;AACnD,iBAAK,WAAW,GAAG,qBAAqB,QAAQ,IAAI,WAAW,MAAM;AACnE,oBAAM,SAAS,KAAK,kBAAkB,6BAA6B;AAAA,gBACjE,gBAAgB,SAAS;AAAA,gBACzB,MAAM;AAAA,gBACN,cAAc,SAAS,gBAAgB,KAAK;AAAA,gBAC5C,eAAe,SAAS;AAAA,gBACxB,sBAAsB,KAAK;AAAA,cAC3C,CAAe;AACD,oBAAM,MAAM,4BAA4B,KAAK,oBAAoB,SAAS,IAAI,GAAG,QAAQ,SAAS,GAAG;AACrG,mBAAK,eAAe,KAAK,MAAM;AAAA,YAC7C,CAAa;AAAA,UACb,CAAW;AACD,kBAAQ,YAAY,CAAC,aAAa;AAChC,iBAAK;AAAA,cACH;AAAA,cACA,SAAS;AAAA,cACT;AAAA,cACA;AAAA,cACA,SAAS;AAAA,cACT,qBAAqB,QAAQ;AAAA,YAC9B;AAAA,UACb,CAAW;AACD,kBAAQ,QAAQ,CAAC,aAAa;AAC5B,iBAAK;AAAA,cACH;AAAA,cACA,SAAS;AAAA,cACT;AAAA,cACA;AAAA,cACA,SAAS;AAAA,cACT,qBAAqB,QAAQ;AAAA,YAC9B;AAAA,UACb,CAAW;AACD,kBAAQ,qBAAqB,CAAC,aAAa;AACzC,iBAAK;AAAA,cACH;AAAA,cACA,SAAS;AAAA,cACT;AAAA,cACA;AAAA,cACA,SAAS;AAAA,cACT,qBAAqB,QAAQ;AAAA,YAC9B;AAAA,UACb,CAAW;AACD,kBAAQ,kCAAkC,CAAC,aAAa;AACtD,iBAAK;AAAA,cACH;AAAA,cACA,SAAS;AAAA,cACT;AAAA,cACA;AAAA,cACA,SAAS;AAAA,cACT,qBAAqB,QAAQ;AAAA,YAC9B;AAAA,UACb,CAAW;AACD,kBAAQ,yBAAyB,CAAC,aAAa;AAC7C,iBAAK;AAAA,cACH;AAAA,cACA,SAAS;AAAA,cACT;AAAA,cACA;AAAA,cACA,SAAS;AAAA,cACT,qBAAqB,QAAQ;AAAA,YAC9B;AAAA,UACb,CAAW;AAAA,QACX,CAAS;AAAA,MACT,CAAO;AAAA,IACF;AAAA,IACD,qBAAqB,MAAM,gBAAgB,SAAS,UAAU,kBAAkB,eAAe;AAC7F,WAAK,WAAW,GAAG,gBAAgB,mBAAmB,IAAI,KAAK,kBAAkB,MAAM;AACrF,cAAM,SAAS,KAAK,kBAAkB,0BAA0B;AAAA,UAC9D;AAAA,UACA;AAAA,UACA,cAAc,oBAAoB,KAAK;AAAA,UACvC,sBAAsB,KAAK;AAAA,UAC3B;AAAA,QACV,CAAS;AACD,cAAM,MAAM,4BAA4B,KAAK,oBAAoB,KAAK,IAAI,GAAG,SAAS,cAAc;AACpG,aAAK,eAAe,KAAK,MAAM;AAAA,MACvC,CAAO;AAAA,IACF;AAAA;AAAA,IAED,4BAA4B,cAAc,YAAY;AACpD,YAAM,oBAAoB,KAAK,6BAA8B;AAC7D,aAAO,4BAA4B,mBAAmB,cAAc,UAAU;AAAA,IAC/E;AAAA,IACD,mBAAmB,KAAK;AACtB,aAAO,KAAK,oBAAoB,IAAI,GAAG;AAAA,IACxC;AAAA;AAAA,IAED,eAAe,KAAK,OAAO;AACzB,WAAK,oBAAoB,IAAI,KAAK,KAAK;AAAA,IACxC;AAAA,EACF;AACD,QAAM,mCAAmC,YAAY;AAAA,IACnD,cAAc;AACZ,YAAM,GAAG,SAAS;AAClB,WAAK,aAAa;AAAA,QAChB,QAAQ,CAAE;AAAA,QACV,aAAa,CAAE;AAAA,QACf,YAAY,CAAE;AAAA,QACd,yBAAyB,CAAE;AAAA,QAC3B,qBAAqB,CAAE;AAAA,QACvB,kCAAkC,CAAE;AAAA,MACrC;AAAA,IACF;AAAA,IACD,QAAQ;AACN,WAAK,aAAa;AAAA,QAChB,QAAQ,CAAE;AAAA,QACV,aAAa,CAAE;AAAA,QACf,YAAY,CAAE;AAAA,QACd,yBAAyB,CAAE;AAAA,QAC3B,qBAAqB,CAAE;AAAA,QACvB,kCAAkC,CAAE;AAAA,MACrC;AAAA,IACF;AAAA,IACD,YAAY,QAAQ;AAClB,WAAK,WAAW,OAAO,KAAK,MAAM;AAAA,IACnC;AAAA,IACD,6BAA6B,SAAS;AACpC,WAAK,WAAW,wBAAwB,KAAK,OAAO;AAAA,IACrD;AAAA,IACD,yBAAyB,YAAY;AACnC,WAAK,WAAW,oBAAoB,KAAK,UAAU;AAAA,IACpD;AAAA,IACD,sCAAsC,eAAe;AACnD,WAAK,WAAW,iCAAiC,KAAK,aAAa;AAAA,IACpE;AAAA,IACD,gBAAgB,MAAM;AACpB,WAAK,WAAW,WAAW,KAAK,IAAI;AAAA,IACrC;AAAA,IACD,iBAAiB,IAAI;AACnB,WAAK,WAAW,YAAY,KAAK,EAAE;AAAA,IACpC;AAAA,EACF;AACD,QAAM,mBAAmB,IAAI,2BAA4B;AACzD,WAAS,eAAe,MAAM;AAC5B,qBAAiB,MAAO;AACxB,SAAK,OAAO,gBAAgB;AAC5B,UAAM,aAAa,iBAAiB;AAEpC,qBAAiB,MAAO;AACxB,WAAO;AAAA,EACR;AASD,WAAS,0BAA0B,kBAAkB,iBAAiB;AAEpE,QAAI,MAAM,iBAAiB,WAAW,MAAM,MAAM;AAIhD,uBAAiB,cAAc,gBAAgB;AAC/C,uBAAiB,YAAY,gBAAgB;AAAA,IAC9C,WAKQ,iBAAiB,YAAY,gBAAgB,cAAc,MAAM;AACxE,uBAAiB,YAAY,gBAAgB;AAAA,IAC9C;AAAA,EACF;AAQD,WAAS,oBAAoB,kBAAkB,iBAAiB;AAE9D,QAAI,MAAM,iBAAiB,WAAW,MAAM,MAAM;AAIhD,uBAAiB,cAAc,gBAAgB;AAC/C,uBAAiB,cAAc,gBAAgB;AAC/C,uBAAiB,YAAY,gBAAgB;AAC7C,uBAAiB,YAAY,gBAAgB;AAC7C,uBAAiB,YAAY,gBAAgB;AAC7C,uBAAiB,UAAU,gBAAgB;AAAA,IAC5C,WAKQ,iBAAiB,YAAY,gBAAgB,cAAc,MAAM;AACxE,uBAAiB,YAAY,gBAAgB;AAC7C,uBAAiB,YAAY,gBAAgB;AAC7C,uBAAiB,UAAU,gBAAgB;AAAA,IAC5C;AAAA,EACF;AACD,WAAS,iBAAiB,MAAM,OAAO,eAAe;AACpD,QAAI,KAAK,SAAS,aAAa,MAAM,QAAW;AAC9C,WAAK,SAAS,aAAa,IAAI,CAAC,KAAK;AAAA,IAC3C,OAAW;AACL,WAAK,SAAS,aAAa,EAAE,KAAK,KAAK;AAAA,IACxC;AAAA,EACF;AACD,WAAS,qBAAqB,MAAM,UAAU,YAAY;AACxD,QAAI,KAAK,SAAS,QAAQ,MAAM,QAAW;AACzC,WAAK,SAAS,QAAQ,IAAI,CAAC,UAAU;AAAA,IAC3C,OAAW;AACL,WAAK,SAAS,QAAQ,EAAE,KAAK,UAAU;AAAA,IACxC;AAAA,EACF;AAED,QAAM,OAAO;AACb,WAAS,eAAe,KAAK,WAAW;AACtC,WAAO,eAAe,KAAK,MAAM;AAAA,MAC/B,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,UAAU;AAAA,MACV,OAAO;AAAA,IACb,CAAK;AAAA,EACF;AAED,WAAS,aAAa,KAAK,OAAO;AAChC,UAAM,gBAAgB,KAAK,GAAG;AAC9B,UAAM,sBAAsB,cAAc;AAC1C,aAAS,IAAI,GAAG,IAAI,qBAAqB,KAAK;AAC5C,YAAM,gBAAgB,cAAc,CAAC;AACrC,YAAM,iBAAiB,IAAI,aAAa;AACxC,YAAM,uBAAuB,eAAe;AAC5C,eAAS,IAAI,GAAG,IAAI,sBAAsB,KAAK;AAC7C,cAAM,YAAY,eAAe,CAAC;AAElC,YAAI,UAAU,iBAAiB,QAAW;AACxC,eAAK,UAAU,IAAI,EAAE,UAAU,UAAU,KAAK;AAAA,QAC/C;AAAA,MACF;AAAA,IACF;AAAA,EAEF;AACD,WAAS,qCAAqC,aAAa,WAAW;AACpE,UAAM,qBAAqB,WAAY;AAAA,IAAE;AAIzC,mBAAe,oBAAoB,cAAc,eAAe;AAChE,UAAM,gBAAgB;AAAA,MACpB,OAAO,SAAU,SAAS,OAAO;AAE/B,YAAI,UAAU,OAAO,GAAG;AAGtB,oBAAU,QAAQ,CAAC;AAAA,QACpB;AAED,YAAI,YAAY,OAAO,GAAG;AACxB,iBAAO;AAAA,QACR;AACD,eAAO,KAAK,QAAQ,IAAI,EAAE,QAAQ,UAAU,KAAK;AAAA,MAClD;AAAA,MACD,iBAAiB,WAAY;AAC3B,cAAM,2BAA2B,gBAAgB,MAAM,SAAS;AAChE,YAAI,CAAC,QAAQ,wBAAwB,GAAG;AACtC,gBAAM,gBAAgB,IAAI,0BAA0B,CAAC,iBAAiB,aAAa,GAAG;AACtF,gBAAM;AAAA,YACJ,mCAAmC,KAAK,YAAY;AAAA,GAC/C,cAAc,KAAK,MAAM,EAAE,QAAQ,OAAO,KAAM;AAAA,UACtD;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACD,uBAAmB,YAAY;AAC/B,uBAAmB,UAAU,cAAc;AAC3C,uBAAmB,cAAc;AACjC,WAAO;AAAA,EACR;AACD,WAAS,yCAAyC,aAAa,WAAW,iBAAiB;AACzF,UAAM,qBAAqB,WAAY;AAAA,IAAE;AAIzC,mBAAe,oBAAoB,cAAc,2BAA2B;AAC5E,UAAM,oBAAoB,OAAO,OAAO,gBAAgB,SAAS;AACjE,YAAQ,WAAW,CAAC,aAAa;AAC/B,wBAAkB,QAAQ,IAAI;AAAA,IACpC,CAAK;AACD,uBAAmB,YAAY;AAC/B,uBAAmB,UAAU,cAAc;AAC3C,WAAO;AAAA,EACR;AACD,MAAI;AACH,GAAC,SAAUC,4BAA2B;AACrC,IAAAA,2BAA2BA,2BAA0B,kBAAkB,IAAI,CAAG,IAAG;AACjF,IAAAA,2BAA2BA,2BAA0B,gBAAgB,IAAI,CAAG,IAAG;AAAA,EACnF,GAAK,8BAA8B,4BAA4B,CAAA,EAAG;AAChE,WAAS,gBAAgB,iBAAiB,WAAW;AACnD,UAAM,gBAAgB,0BAA0B,iBAAiB,SAAS;AAC1E,WAAO;AAAA,EACR;AACD,WAAS,0BAA0B,iBAAiB,WAAW;AAC7D,UAAM,mBAAmB,OAAO,WAAW,CAAC,iBAAiB;AAC3D,aAAO,WAAW,gBAAgB,YAAY,CAAC,MAAM;AAAA,IAC3D,CAAK;AACD,UAAM,SAAS,IAAI,kBAAkB,CAAC,iBAAiB;AACrD,aAAO;AAAA,QACL,KAAK,4BAA4B,oBAAoB,gBAAgB,YAAY;AAAA,QACjF,MAAM,0BAA0B;AAAA,QAChC,YAAY;AAAA,MACb;AAAA,IACP,CAAK;AACD,WAAO,QAAQ,MAAM;AAAA,EACtB;AAKD,QAAM,YAAY;AAAA,IAChB,gBAAgB,QAAQ;AACtB,WAAK,YAAY,CAAE;AAEnB,WAAK,YAAY,OAAO;AACxB,WAAK,uBAAuB,IAAI,QAAQ,sBAAsB,IAC1D,OAAO,uBACP,sBAAsB;AAC1B,UAAI,CAAC,KAAK,WAAW;AACnB,aAAK,2BAA2B;AAChC,aAAK,wBAAwB;AAC7B,aAAK,kBAAkB;AACvB,aAAK,qBAAqB;AAC1B,aAAK,cAAc;AAAA,MAC3B,OAAa;AACL,YAAI,QAAQ,KAAK,KAAK,oBAAoB,GAAG;AAC3C,cAAI,KAAK,iBAAiB;AACxB,iBAAK,2BAA2B;AAChC,iBAAK,0BAA0B;AAC/B,iBAAK,cAAc;AACnB,iBAAK,yBAAyB,KAAK;AAAA,UAC/C,OAAiB;AACL,iBAAK,2BAA2B;AAChC,iBAAK,0BAA0B;AAC/B,iBAAK,cAAc,KAAK;AACxB,iBAAK,yBAAyB,KAAK;AAAA,UACpC;AAAA,QACF,WAAU,cAAc,KAAK,KAAK,oBAAoB,GAAG;AACxD,cAAI,KAAK,iBAAiB;AACxB,iBAAK,2BAA2B;AAChC,iBAAK,0BAA0B;AAC/B,iBAAK,cAAc;AACnB,iBAAK,yBAAyB,KAAK;AAAA,UAC/C,OAAiB;AACL,iBAAK,2BAA2B;AAChC,iBAAK,0BAA0B;AAC/B,iBAAK,cAAc,KAAK;AACxB,iBAAK,yBAAyB,KAAK;AAAA,UACpC;AAAA,QACF,WAAU,QAAQ,KAAK,KAAK,oBAAoB,GAAG;AAClD,eAAK,2BAA2B;AAChC,eAAK,0BAA0B;AAC/B,eAAK,cAAc;AACnB,eAAK,yBAAyB;AAAA,QACxC,OAAe;AACL,gBAAM,MAAM,kDAAkD,OAAO,uBAAuB;AAAA,QAC7F;AAAA,MACF;AAAA,IACF;AAAA,IACD,yCAAyC,SAAS;AAChD,cAAQ,WAAW;AAAA,QACjB,aAAa;AAAA,QACb,WAAW;AAAA,MACZ;AAAA,IACF;AAAA,IACD,wCAAwC,SAAS;AAC/C,cAAQ,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,QAKjB,aAAa,KAAK,GAAG,CAAC,EAAE;AAAA,QACxB,WAAW;AAAA,MACZ;AAAA,IACF;AAAA,IACD,mCAAmC,SAAS;AAC1C,cAAQ,WAAW;AAAA,QACjB,aAAa;AAAA,QACb,WAAW;AAAA,QACX,aAAa;AAAA,QACb,WAAW;AAAA,QACX,SAAS;AAAA,QACT,WAAW;AAAA,MACZ;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMD,kCAAkC,SAAS;AACzC,YAAM,YAAY,KAAK,GAAG,CAAC;AAC3B,cAAQ,WAAW;AAAA,QACjB,aAAa,UAAU;AAAA,QACvB,WAAW,UAAU;AAAA,QACrB,aAAa,UAAU;AAAA,QACvB,WAAW;AAAA,QACX,SAAS;AAAA,QACT,WAAW;AAAA,MACZ;AAAA,IACF;AAAA,IACD,yBAAyB,cAAc;AACrC,YAAM,UAAU;AAAA,QACd,MAAM;AAAA,QACN,UAAU,uBAAO,OAAO,IAAI;AAAA,MAC7B;AACD,WAAK,uBAAuB,OAAO;AACnC,WAAK,UAAU,KAAK,OAAO;AAAA,IAC5B;AAAA,IACD,wBAAwB;AACtB,WAAK,UAAU,IAAK;AAAA,IACrB;AAAA,IACD,gBAAgB,aAAa;AAE3B,YAAM,YAAY,KAAK,GAAG,CAAC;AAC3B,YAAM,MAAM,YAAY;AAGxB,UAAI,IAAI,eAAe,UAAU,gBAAgB,MAAM;AACrD,YAAI,YAAY,UAAU;AAC1B,YAAI,UAAU,UAAU;AACxB,YAAI,YAAY,UAAU;AAAA,MAC3B,OAEI;AACH,YAAI,cAAc;AAClB,YAAI,YAAY;AAChB,YAAI,cAAc;AAAA,MACnB;AAAA,IACF;AAAA,IACD,sBAAsB,aAAa;AACjC,YAAM,YAAY,KAAK,GAAG,CAAC;AAE3B,YAAM,MAAM,YAAY;AAGxB,UAAI,IAAI,eAAe,UAAU,gBAAgB,MAAM;AACrD,YAAI,YAAY,UAAU;AAAA,MAC3B,OAEI;AACH,YAAI,cAAc;AAAA,MACnB;AAAA,IACF;AAAA,IACD,gBAAgB,KAAK,eAAe;AAClC,YAAM,UAAU,KAAK,UAAU,KAAK,UAAU,SAAS,CAAC;AACxD,uBAAiB,SAAS,eAAe,GAAG;AAE5C,WAAK,yBAAyB,QAAQ,UAAU,aAAa;AAAA,IAC9D;AAAA,IACD,mBAAmB,eAAe,UAAU;AAC1C,YAAM,aAAa,KAAK,UAAU,KAAK,UAAU,SAAS,CAAC;AAC3D,2BAAqB,YAAY,UAAU,aAAa;AAExD,WAAK,wBAAwB,WAAW,UAAU,cAAc,QAAQ;AAAA,IACzE;AAAA,IACD,+BAA+B;AAC7B,UAAI,YAAY,KAAK,yBAAyB,GAAG;AAC/C,cAAM,+BAA+B;AAAA,UACnC,KAAK;AAAA,UACL,KAAK,KAAK,oBAAoB;AAAA,QAC/B;AACD,aAAK,4BAA4B;AACjC,eAAO;AAAA,MACR;AACD,aAAO,KAAK;AAAA,IACb;AAAA,IACD,2CAA2C;AACzC,UAAI,YAAY,KAAK,qCAAqC,GAAG;AAC3D,cAAM,iBAAiB;AAAA,UACrB,KAAK;AAAA,UACL,KAAK,KAAK,oBAAoB;AAAA,UAC9B,KAAK,6BAA8B;AAAA,QACpC;AACD,aAAK,wCAAwC;AAC7C,eAAO;AAAA,MACR;AACD,aAAO,KAAK;AAAA,IACb;AAAA,IACD,+BAA+B;AAC7B,YAAM,YAAY,KAAK;AACvB,aAAO,UAAU,UAAU,SAAS,CAAC;AAAA,IACtC;AAAA,IACD,mCAAmC;AACjC,YAAM,YAAY,KAAK;AACvB,aAAO,UAAU,UAAU,SAAS,CAAC;AAAA,IACtC;AAAA,IACD,qCAAqC;AACnC,YAAM,kBAAkB,KAAK;AAC7B,aAAO,gBAAgB,gBAAgB,SAAS,CAAC;AAAA,IAClD;AAAA,EACF;AASD,QAAM,aAAa;AAAA,IACjB,mBAAmB;AACjB,WAAK,YAAY,CAAE;AACnB,WAAK,kBAAkB;AACvB,WAAK,UAAU;AAAA,IAChB;AAAA,IACD,IAAI,MAAM,UAAU;AAGlB,UAAI,KAAK,qBAAqB,MAAM;AAClC,cAAM,MAAM,kFAAkF;AAAA,MAC/F;AAGD,WAAK,MAAO;AACZ,WAAK,YAAY;AACjB,WAAK,kBAAkB,SAAS;AAAA,IACjC;AAAA,IACD,IAAI,QAAQ;AACV,aAAO,KAAK;AAAA,IACb;AAAA;AAAA,IAED,aAAa;AACX,UAAI,KAAK,WAAW,KAAK,UAAU,SAAS,GAAG;AAC7C,aAAK,aAAc;AACnB,eAAO,KAAK,GAAG,CAAC;AAAA,MACxB,OAAa;AACL,eAAO;AAAA,MACR;AAAA,IACF;AAAA;AAAA;AAAA,IAGD,GAAG,SAAS;AACV,YAAM,YAAY,KAAK,UAAU;AACjC,UAAI,YAAY,KAAK,KAAK,mBAAmB,WAAW;AACtD,eAAO;AAAA,MACf,OAAa;AACL,eAAO,KAAK,UAAU,SAAS;AAAA,MAChC;AAAA,IACF;AAAA,IACD,eAAe;AACb,WAAK;AAAA,IACN;AAAA,IACD,mBAAmB;AACjB,aAAO,KAAK;AAAA,IACb;AAAA,IACD,iBAAiB,UAAU;AACzB,WAAK,UAAU;AAAA,IAChB;AAAA,IACD,kBAAkB;AAChB,WAAK,UAAU;AAAA,IAChB;AAAA,IACD,wBAAwB;AACtB,WAAK,UAAU,KAAK,UAAU,SAAS;AAAA,IACxC;AAAA,IACD,mBAAmB;AACjB,aAAO,KAAK,iBAAkB;AAAA,IAC/B;AAAA,EACF;AAUD,QAAM,cAAc;AAAA,IAClB,OAAO,MAAM;AACX,aAAO,KAAK,KAAK,IAAI;AAAA,IACtB;AAAA,IACD,QAAQ,KAAK,SAAS,SAAS;AAC7B,aAAO,KAAK,gBAAgB,SAAS,KAAK,OAAO;AAAA,IAClD;AAAA,IACD,QAAQ,KAAK,YAAY,SAAS;AAChC,aAAO,KAAK,gBAAgB,YAAY,KAAK,OAAO;AAAA,IACrD;AAAA,IACD,OAAO,KAAK,mBAAmB;AAC7B,aAAO,KAAK,eAAe,mBAAmB,GAAG;AAAA,IAClD;AAAA,IACD,GAAG,KAAK,YAAY;AAClB,aAAO,KAAK,WAAW,YAAY,GAAG;AAAA,IACvC;AAAA,IACD,KAAK,KAAK,mBAAmB;AAC3B,aAAO,KAAK,aAAa,KAAK,iBAAiB;AAAA,IAChD;AAAA,IACD,WAAW,KAAK,mBAAmB;AACjC,aAAO,KAAK,mBAAmB,KAAK,iBAAiB;AAAA,IACtD;AAAA,IACD,QAAQ,SAAS,SAAS;AACxB,aAAO,KAAK,gBAAgB,SAAS,GAAG,OAAO;AAAA,IAChD;AAAA,IACD,SAAS,SAAS,SAAS;AACzB,aAAO,KAAK,gBAAgB,SAAS,GAAG,OAAO;AAAA,IAChD;AAAA,IACD,SAAS,SAAS,SAAS;AACzB,aAAO,KAAK,gBAAgB,SAAS,GAAG,OAAO;AAAA,IAChD;AAAA,IACD,SAAS,SAAS,SAAS;AACzB,aAAO,KAAK,gBAAgB,SAAS,GAAG,OAAO;AAAA,IAChD;AAAA,IACD,SAAS,SAAS,SAAS;AACzB,aAAO,KAAK,gBAAgB,SAAS,GAAG,OAAO;AAAA,IAChD;AAAA,IACD,SAAS,SAAS,SAAS;AACzB,aAAO,KAAK,gBAAgB,SAAS,GAAG,OAAO;AAAA,IAChD;AAAA,IACD,SAAS,SAAS,SAAS;AACzB,aAAO,KAAK,gBAAgB,SAAS,GAAG,OAAO;AAAA,IAChD;AAAA,IACD,SAAS,SAAS,SAAS;AACzB,aAAO,KAAK,gBAAgB,SAAS,GAAG,OAAO;AAAA,IAChD;AAAA,IACD,SAAS,SAAS,SAAS;AACzB,aAAO,KAAK,gBAAgB,SAAS,GAAG,OAAO;AAAA,IAChD;AAAA,IACD,SAAS,SAAS,SAAS;AACzB,aAAO,KAAK,gBAAgB,SAAS,GAAG,OAAO;AAAA,IAChD;AAAA,IACD,QAAQ,YAAY,SAAS;AAC3B,aAAO,KAAK,gBAAgB,YAAY,GAAG,OAAO;AAAA,IACnD;AAAA,IACD,SAAS,YAAY,SAAS;AAC5B,aAAO,KAAK,gBAAgB,YAAY,GAAG,OAAO;AAAA,IACnD;AAAA,IACD,SAAS,YAAY,SAAS;AAC5B,aAAO,KAAK,gBAAgB,YAAY,GAAG,OAAO;AAAA,IACnD;AAAA,IACD,SAAS,YAAY,SAAS;AAC5B,aAAO,KAAK,gBAAgB,YAAY,GAAG,OAAO;AAAA,IACnD;AAAA,IACD,SAAS,YAAY,SAAS;AAC5B,aAAO,KAAK,gBAAgB,YAAY,GAAG,OAAO;AAAA,IACnD;AAAA,IACD,SAAS,YAAY,SAAS;AAC5B,aAAO,KAAK,gBAAgB,YAAY,GAAG,OAAO;AAAA,IACnD;AAAA,IACD,SAAS,YAAY,SAAS;AAC5B,aAAO,KAAK,gBAAgB,YAAY,GAAG,OAAO;AAAA,IACnD;AAAA,IACD,SAAS,YAAY,SAAS;AAC5B,aAAO,KAAK,gBAAgB,YAAY,GAAG,OAAO;AAAA,IACnD;AAAA,IACD,SAAS,YAAY,SAAS;AAC5B,aAAO,KAAK,gBAAgB,YAAY,GAAG,OAAO;AAAA,IACnD;AAAA,IACD,SAAS,YAAY,SAAS;AAC5B,aAAO,KAAK,gBAAgB,YAAY,GAAG,OAAO;AAAA,IACnD;AAAA,IACD,OAAO,mBAAmB;AACxB,aAAO,KAAK,eAAe,mBAAmB,CAAC;AAAA,IAChD;AAAA,IACD,QAAQ,mBAAmB;AACzB,aAAO,KAAK,eAAe,mBAAmB,CAAC;AAAA,IAChD;AAAA,IACD,QAAQ,mBAAmB;AACzB,aAAO,KAAK,eAAe,mBAAmB,CAAC;AAAA,IAChD;AAAA,IACD,QAAQ,mBAAmB;AACzB,aAAO,KAAK,eAAe,mBAAmB,CAAC;AAAA,IAChD;AAAA,IACD,QAAQ,mBAAmB;AACzB,aAAO,KAAK,eAAe,mBAAmB,CAAC;AAAA,IAChD;AAAA,IACD,QAAQ,mBAAmB;AACzB,aAAO,KAAK,eAAe,mBAAmB,CAAC;AAAA,IAChD;AAAA,IACD,QAAQ,mBAAmB;AACzB,aAAO,KAAK,eAAe,mBAAmB,CAAC;AAAA,IAChD;AAAA,IACD,QAAQ,mBAAmB;AACzB,aAAO,KAAK,eAAe,mBAAmB,CAAC;AAAA,IAChD;AAAA,IACD,QAAQ,mBAAmB;AACzB,aAAO,KAAK,eAAe,mBAAmB,CAAC;AAAA,IAChD;AAAA,IACD,QAAQ,mBAAmB;AACzB,aAAO,KAAK,eAAe,mBAAmB,CAAC;AAAA,IAChD;AAAA,IACD,GAAG,YAAY;AACb,aAAO,KAAK,WAAW,YAAY,CAAC;AAAA,IACrC;AAAA,IACD,IAAI,YAAY;AACd,aAAO,KAAK,WAAW,YAAY,CAAC;AAAA,IACrC;AAAA,IACD,IAAI,YAAY;AACd,aAAO,KAAK,WAAW,YAAY,CAAC;AAAA,IACrC;AAAA,IACD,IAAI,YAAY;AACd,aAAO,KAAK,WAAW,YAAY,CAAC;AAAA,IACrC;AAAA,IACD,IAAI,YAAY;AACd,aAAO,KAAK,WAAW,YAAY,CAAC;AAAA,IACrC;AAAA,IACD,IAAI,YAAY;AACd,aAAO,KAAK,WAAW,YAAY,CAAC;AAAA,IACrC;AAAA,IACD,IAAI,YAAY;AACd,aAAO,KAAK,WAAW,YAAY,CAAC;AAAA,IACrC;AAAA,IACD,IAAI,YAAY;AACd,aAAO,KAAK,WAAW,YAAY,CAAC;AAAA,IACrC;AAAA,IACD,IAAI,YAAY;AACd,aAAO,KAAK,WAAW,YAAY,CAAC;AAAA,IACrC;AAAA,IACD,IAAI,YAAY;AACd,aAAO,KAAK,WAAW,YAAY,CAAC;AAAA,IACrC;AAAA,IACD,KAAK,mBAAmB;AACtB,WAAK,aAAa,GAAG,iBAAiB;AAAA,IACvC;AAAA,IACD,MAAM,mBAAmB;AACvB,WAAK,aAAa,GAAG,iBAAiB;AAAA,IACvC;AAAA,IACD,MAAM,mBAAmB;AACvB,WAAK,aAAa,GAAG,iBAAiB;AAAA,IACvC;AAAA,IACD,MAAM,mBAAmB;AACvB,WAAK,aAAa,GAAG,iBAAiB;AAAA,IACvC;AAAA,IACD,MAAM,mBAAmB;AACvB,WAAK,aAAa,GAAG,iBAAiB;AAAA,IACvC;AAAA,IACD,MAAM,mBAAmB;AACvB,WAAK,aAAa,GAAG,iBAAiB;AAAA,IACvC;AAAA,IACD,MAAM,mBAAmB;AACvB,WAAK,aAAa,GAAG,iBAAiB;AAAA,IACvC;AAAA,IACD,MAAM,mBAAmB;AACvB,WAAK,aAAa,GAAG,iBAAiB;AAAA,IACvC;AAAA,IACD,MAAM,mBAAmB;AACvB,WAAK,aAAa,GAAG,iBAAiB;AAAA,IACvC;AAAA,IACD,MAAM,mBAAmB;AACvB,WAAK,aAAa,GAAG,iBAAiB;AAAA,IACvC;AAAA,IACD,SAAS,SAAS;AAChB,WAAK,qBAAqB,GAAG,OAAO;AAAA,IACrC;AAAA,IACD,UAAU,SAAS;AACjB,WAAK,qBAAqB,GAAG,OAAO;AAAA,IACrC;AAAA,IACD,UAAU,SAAS;AACjB,WAAK,qBAAqB,GAAG,OAAO;AAAA,IACrC;AAAA,IACD,UAAU,SAAS;AACjB,WAAK,qBAAqB,GAAG,OAAO;AAAA,IACrC;AAAA,IACD,UAAU,SAAS;AACjB,WAAK,qBAAqB,GAAG,OAAO;AAAA,IACrC;AAAA,IACD,UAAU,SAAS;AACjB,WAAK,qBAAqB,GAAG,OAAO;AAAA,IACrC;AAAA,IACD,UAAU,SAAS;AACjB,WAAK,qBAAqB,GAAG,OAAO;AAAA,IACrC;AAAA,IACD,UAAU,SAAS;AACjB,WAAK,qBAAqB,GAAG,OAAO;AAAA,IACrC;AAAA,IACD,UAAU,SAAS;AACjB,WAAK,qBAAqB,GAAG,OAAO;AAAA,IACrC;AAAA,IACD,UAAU,SAAS;AACjB,WAAK,qBAAqB,GAAG,OAAO;AAAA,IACrC;AAAA,IACD,aAAa,mBAAmB;AAC9B,WAAK,mBAAmB,GAAG,iBAAiB;AAAA,IAC7C;AAAA,IACD,cAAc,mBAAmB;AAC/B,aAAO,KAAK,mBAAmB,GAAG,iBAAiB;AAAA,IACpD;AAAA,IACD,cAAc,mBAAmB;AAC/B,WAAK,mBAAmB,GAAG,iBAAiB;AAAA,IAC7C;AAAA,IACD,cAAc,mBAAmB;AAC/B,WAAK,mBAAmB,GAAG,iBAAiB;AAAA,IAC7C;AAAA,IACD,cAAc,mBAAmB;AAC/B,WAAK,mBAAmB,GAAG,iBAAiB;AAAA,IAC7C;AAAA,IACD,cAAc,mBAAmB;AAC/B,WAAK,mBAAmB,GAAG,iBAAiB;AAAA,IAC7C;AAAA,IACD,cAAc,mBAAmB;AAC/B,WAAK,mBAAmB,GAAG,iBAAiB;AAAA,IAC7C;AAAA,IACD,cAAc,mBAAmB;AAC/B,WAAK,mBAAmB,GAAG,iBAAiB;AAAA,IAC7C;AAAA,IACD,cAAc,mBAAmB;AAC/B,WAAK,mBAAmB,GAAG,iBAAiB;AAAA,IAC7C;AAAA,IACD,cAAc,mBAAmB;AAC/B,WAAK,mBAAmB,GAAG,iBAAiB;AAAA,IAC7C;AAAA,IACD,iBAAiB,SAAS;AACxB,WAAK,2BAA2B,GAAG,OAAO;AAAA,IAC3C;AAAA,IACD,kBAAkB,SAAS;AACzB,WAAK,2BAA2B,GAAG,OAAO;AAAA,IAC3C;AAAA,IACD,kBAAkB,SAAS;AACzB,WAAK,2BAA2B,GAAG,OAAO;AAAA,IAC3C;AAAA,IACD,kBAAkB,SAAS;AACzB,WAAK,2BAA2B,GAAG,OAAO;AAAA,IAC3C;AAAA,IACD,kBAAkB,SAAS;AACzB,WAAK,2BAA2B,GAAG,OAAO;AAAA,IAC3C;AAAA,IACD,kBAAkB,SAAS;AACzB,WAAK,2BAA2B,GAAG,OAAO;AAAA,IAC3C;AAAA,IACD,kBAAkB,SAAS;AACzB,WAAK,2BAA2B,GAAG,OAAO;AAAA,IAC3C;AAAA,IACD,kBAAkB,SAAS;AACzB,WAAK,2BAA2B,GAAG,OAAO;AAAA,IAC3C;AAAA,IACD,kBAAkB,SAAS;AACzB,WAAK,2BAA2B,GAAG,OAAO;AAAA,IAC3C;AAAA,IACD,kBAAkB,SAAS;AACzB,WAAK,2BAA2B,GAAG,OAAO;AAAA,IAC3C;AAAA,IACD,KAAK,MAAM,gBAAgB,SAAS,qBAAqB;AACvD,UAAI,SAAS,KAAK,mBAAmB,IAAI,GAAG;AAC1C,cAAM,SAAS,qCAAqC,4BAA4B;AAAA,UAC9E,cAAc;AAAA,UACd,aAAa,KAAK;AAAA,QAC5B,CAAS;AACD,cAAM,QAAQ;AAAA,UACZ,SAAS;AAAA,UACT,MAAM,0BAA0B;AAAA,UAChC,UAAU;AAAA,QACX;AACD,aAAK,iBAAiB,KAAK,KAAK;AAAA,MACjC;AACD,WAAK,kBAAkB,KAAK,IAAI;AAChC,YAAM,qBAAqB,KAAK,WAAW,MAAM,gBAAgB,MAAM;AACvE,WAAK,IAAI,IAAI;AACb,aAAO;AAAA,IACR;AAAA,IACD,cAAc,MAAM,MAAM,SAAS,qBAAqB;AACtD,YAAM,aAAa,yBAAyB,MAAM,KAAK,mBAAmB,KAAK,SAAS;AACxF,WAAK,mBAAmB,KAAK,iBAAiB,OAAO,UAAU;AAC/D,YAAM,qBAAqB,KAAK,WAAW,MAAM,MAAM,MAAM;AAC7D,WAAK,IAAI,IAAI;AACb,aAAO;AAAA,IACR;AAAA,IACD,UAAU,aAAa,MAAM;AAC3B,aAAO,WAAY;AAEjB,aAAK,oBAAoB,KAAK,CAAC;AAC/B,cAAM,WAAW,KAAK,eAAgB;AACtC,YAAI;AACF,sBAAY,MAAM,MAAM,IAAI;AAE5B,iBAAO;AAAA,QACR,SAAQ,GAAP;AACA,cAAI,uBAAuB,CAAC,GAAG;AAC7B,mBAAO;AAAA,UACnB,OAAiB;AACL,kBAAM;AAAA,UACP;AAAA,QACX,UAAkB;AACR,eAAK,iBAAiB,QAAQ;AAC9B,eAAK,oBAAoB,IAAK;AAAA,QAC/B;AAAA,MACF;AAAA,IACF;AAAA;AAAA,IAED,qBAAqB;AACnB,aAAO,KAAK;AAAA,IACb;AAAA,IACD,+BAA+B;AAC7B,aAAO,iBAAiB,OAAO,KAAK,oBAAoB,CAAC;AAAA,IAC1D;AAAA,EACF;AAMD,QAAM,iBAAiB;AAAA,IACrB,qBAAqB,iBAAiB,QAAQ;AAC5C,WAAK,YAAY,KAAK,YAAY;AAElC,WAAK,sBAAsB,CAAE;AAC7B,WAAK,sBAAsB,CAAE;AAC7B,WAAK,mBAAmB;AACxB,WAAK,eAAe;AACpB,WAAK,aAAa;AAClB,WAAK,oBAAoB,CAAE;AAC3B,WAAK,YAAY,CAAE;AACnB,WAAK,sBAAsB,CAAE;AAC7B,WAAK,aAAa,CAAE;AACpB,WAAK,wBAAwB,CAAE;AAC/B,WAAK,uBAAuB,CAAE;AAC9B,UAAI,IAAI,QAAQ,mBAAmB,GAAG;AACpC,cAAM;AAAA,UACJ;AAAA,QAGD;AAAA,MACF;AACD,UAAI,UAAU,eAAe,GAAG;AAI9B,YAAI,QAAQ,eAAe,GAAG;AAC5B,gBAAM;AAAA,YACJ;AAAA,UAGD;AAAA,QACF;AACD,YAAI,OAAO,gBAAgB,CAAC,EAAE,gBAAgB,UAAU;AACtD,gBAAM;AAAA,YACJ;AAAA,UAGD;AAAA,QACF;AAAA,MACF;AACD,UAAI,UAAU,eAAe,GAAG;AAC9B,aAAK,YAAY;AAAA,UACf;AAAA,UACA,CAAC,KAAK,YAAY;AAChB,gBAAI,QAAQ,IAAI,IAAI;AACpB,mBAAO;AAAA,UACR;AAAA,UACD,CAAE;AAAA,QACH;AAAA,MACF,WAAU,IAAI,iBAAiB,OAAO,KAAK,MAAM,QAAQ,OAAO,gBAAgB,KAAK,CAAC,GAAG,WAAW,GAAG;AACtG,cAAMC,iBAAgB,QAAQ,OAAO,gBAAgB,KAAK,CAAC;AAC3D,cAAM,eAAe,KAAKA,cAAa;AACvC,aAAK,YAAY;AAAA,UACf;AAAA,UACA,CAAC,KAAK,YAAY;AAChB,gBAAI,QAAQ,IAAI,IAAI;AACpB,mBAAO;AAAA,UACR;AAAA,UACD,CAAE;AAAA,QACH;AAAA,MACT,WAAiB,SAAS,eAAe,GAAG;AACpC,aAAK,YAAY,MAAM,eAAe;AAAA,MAC9C,OAAa;AACL,cAAM,IAAI;AAAA,UACR;AAAA,QAED;AAAA,MACF;AAGD,WAAK,UAAU,KAAK,IAAI;AACxB,YAAM,gBAAgB,IAAI,iBAAiB,OAAO,IAC9C,QAAQ,OAAO,gBAAgB,KAAK,CAAC,IACrC,OAAO,eAAe;AAC1B,YAAM,wBAAwB;AAAA,QAAM;AAAA,QAAe,CAAC,qBAClD,QAAQ,iBAAiB,eAAe;AAAA,MACzC;AACD,WAAK,eAAe,wBAAwB,qCAAqC;AAIjF,wBAAkB,OAAO,KAAK,SAAS,CAAC;AAAA,IACzC;AAAA,IACD,WAAW,UAAU,MAAM,QAAQ;AACjC,UAAI,KAAK,kBAAkB;AACzB,cAAM;AAAA,UACJ,iBAAiB;AAAA;AAAA,QAElB;AAAA,MACF;AACD,YAAM,gBAAgB,IAAI,QAAQ,eAAe,IAC7C,OAAO,gBACP,oBAAoB;AACxB,YAAM,oBAAoB,IAAI,QAAQ,mBAAmB,IACrD,OAAO,oBACP,oBAAoB;AAGxB,YAAM,YAAY,KAAK,oBAAqB,uBAAuB;AACnE,WAAK;AACL,WAAK,oBAAoB,SAAS,IAAI;AACtC,WAAK,oBAAoB,QAAQ,IAAI;AACrC,UAAI;AAGJ,UAAI,KAAK,cAAc,MAAM;AAC3B,4BAAoB,SAASC,sBAAqB,MAAM;AACtD,cAAI;AACF,iBAAK,0BAA0B,WAAW,UAAU,KAAK,UAAU;AACnE,iBAAK,MAAM,MAAM,IAAI;AACrB,kBAAM,MAAM,KAAK,UAAU,KAAK,UAAU,SAAS,CAAC;AACpD,iBAAK,YAAY,GAAG;AACpB,mBAAO;AAAA,UACR,SAAQ,GAAP;AACA,mBAAO,KAAK,gBAAgB,GAAG,eAAe,iBAAiB;AAAA,UAC3E,UAAoB;AACR,iBAAK,uBAAwB;AAAA,UAC9B;AAAA,QACF;AAAA,MACT,OAAa;AACL,4BAAoB,SAAS,wBAAwB,MAAM;AACzD,cAAI;AACF,iBAAK,0BAA0B,WAAW,UAAU,KAAK,UAAU;AACnE,mBAAO,KAAK,MAAM,MAAM,IAAI;AAAA,UAC7B,SAAQ,GAAP;AACA,mBAAO,KAAK,gBAAgB,GAAG,eAAe,iBAAiB;AAAA,UAC3E,UAAoB;AACR,iBAAK,uBAAwB;AAAA,UAC9B;AAAA,QACF;AAAA,MACF;AACD,YAAM,qBAAqB,OAAO,OAAO,mBAAmB,EAAE,UAAU,uBAAuB,MAAM;AACrG,aAAO;AAAA,IACR;AAAA,IACD,gBAAgB,GAAG,qBAAqB,mBAAmB;AACzD,YAAM,qBAAqB,KAAK,WAAW,WAAW;AAKtD,YAAM,gBAAgB,uBAAuB,CAAC,KAAK,eAAc,KAAM,KAAK;AAC5E,UAAI,uBAAuB,CAAC,GAAG;AAC7B,cAAM,aAAa;AACnB,YAAI,eAAe;AACjB,gBAAM,gBAAgB,KAAK,oBAAqB;AAChD,cAAI,KAAK,yBAAyB,aAAa,GAAG;AAChD,uBAAW,iBAAiB,KAAK,SAAS,aAAa;AACvD,gBAAI,KAAK,WAAW;AAClB,oBAAM,mBAAmB,KAAK,UAAU,KAAK,UAAU,SAAS,CAAC;AACjE,+BAAiB,gBAAgB;AACjC,qBAAO;AAAA,YACrB,OAAmB;AACL,qBAAO,kBAAkB,CAAC;AAAA,YAC3B;AAAA,UACb,OAAiB;AACL,gBAAI,KAAK,WAAW;AAClB,oBAAM,mBAAmB,KAAK,UAAU,KAAK,UAAU,SAAS,CAAC;AACjE,+BAAiB,gBAAgB;AACjC,yBAAW,mBAAmB;AAAA,YAC/B;AAED,kBAAM;AAAA,UACP;AAAA,QACF,WAAU,oBAAoB;AAE7B,eAAK,sBAAuB;AAG5B,iBAAO,kBAAkB,CAAC;AAAA,QACpC,OAAe;AAEL,gBAAM;AAAA,QACP;AAAA,MACT,OAAa;AAEL,cAAM;AAAA,MACP;AAAA,IACF;AAAA;AAAA,IAED,eAAe,mBAAmB,YAAY;AAC5C,YAAM,MAAM,KAAK,4BAA4B,YAAY,UAAU;AACnE,aAAO,KAAK,oBAAoB,mBAAmB,YAAY,GAAG;AAAA,IACnE;AAAA,IACD,oBAAoB,mBAAmB,YAAY,KAAK;AACtD,UAAI,gBAAgB,KAAK,mBAAmB,GAAG;AAC/C,UAAI;AACJ,UAAI,OAAO,sBAAsB,YAAY;AAC3C,iBAAS,kBAAkB;AAC3B,cAAM,YAAY,kBAAkB;AAEpC,YAAI,cAAc,QAAW;AAC3B,gBAAM,uBAAuB;AAC7B,0BAAgB,MAAM;AACpB,mBAAO,UAAU,KAAK,IAAI,KAAK,qBAAqB,KAAK,IAAI;AAAA,UAC9D;AAAA,QACF;AAAA,MACT,OAAa;AACL,iBAAS;AAAA,MACV;AACD,UAAI,cAAc,KAAK,IAAI,MAAM,MAAM;AACrC,eAAO,OAAO,KAAK,IAAI;AAAA,MACxB;AACD,aAAO;AAAA,IACR;AAAA,IACD,mBAAmB,gBAAgB,mBAAmB;AACpD,YAAM,QAAQ,KAAK,4BAA4B,kBAAkB,cAAc;AAC/E,aAAO,KAAK,wBAAwB,gBAAgB,mBAAmB,KAAK;AAAA,IAC7E;AAAA,IACD,wBAAwB,gBAAgB,mBAAmB,KAAK;AAC9D,UAAI,gBAAgB,KAAK,mBAAmB,GAAG;AAC/C,UAAI;AACJ,UAAI,OAAO,sBAAsB,YAAY;AAC3C,iBAAS,kBAAkB;AAC3B,cAAM,YAAY,kBAAkB;AAEpC,YAAI,cAAc,QAAW;AAC3B,gBAAM,uBAAuB;AAC7B,0BAAgB,MAAM;AACpB,mBAAO,UAAU,KAAK,IAAI,KAAK,qBAAqB,KAAK,IAAI;AAAA,UAC9D;AAAA,QACF;AAAA,MACT,OAAa;AACL,iBAAS;AAAA,MACV;AACD,UAAI,cAAc,KAAK,IAAI,MAAM,MAAM;AACrC,YAAI,WAAW,KAAK,mBAAmB,MAAM;AAC7C,eAAO,cAAc,KAAK,IAAI,MAAM,QAAQ,aAAa,MAAM;AAC7D,qBAAW,KAAK,mBAAmB,MAAM;AAAA,QAC1C;AAAA,MACT,OAAa;AACL,cAAM,KAAK,wBAAwB,gBAAgB,UAAU,sBAAsB,kBAAkB,OAAO;AAAA,MAC7G;AAKD,WAAK;AAAA,QACH,KAAK;AAAA,QACL,CAAC,gBAAgB,iBAAiB;AAAA,QAClC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA,IACF;AAAA,IACD,2BAA2B,gBAAgB,SAAS;AAClD,YAAM,QAAQ,KAAK,4BAA4B,sBAAsB,cAAc;AACnF,WAAK,gCAAgC,gBAAgB,SAAS,KAAK;AAAA,IACpE;AAAA,IACD,gCAAgC,gBAAgB,SAAS,KAAK;AAC5D,YAAM,SAAS,QAAQ;AACvB,YAAM,YAAY,QAAQ;AAC1B,YAAM,8BAA8B,KAAK,mBAAmB,GAAG;AAE/D,UAAI,4BAA4B,KAAK,IAAI,MAAM,MAAM;AACnD,eAAO,KAAK,IAAI;AAGhB,cAAM,yBAAyB,MAAM;AACnC,iBAAO,KAAK,aAAa,KAAK,GAAG,CAAC,GAAG,SAAS;AAAA,QAC/C;AAED,eAAO,KAAK,aAAa,KAAK,GAAG,CAAC,GAAG,SAAS,MAAM,MAAM;AAGxD,eAAK,QAAQ,SAAS;AAEtB,iBAAO,KAAK,IAAI;AAAA,QACjB;AAED,aAAK;AAAA,UACH,KAAK;AAAA,UACL,CAAC,gBAAgB,WAAW,wBAAwB,QAAQ,oCAAoC;AAAA,UAChG;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACD;AAAA,MACT,OAAa;AACL,cAAM,KAAK;AAAA,UACT;AAAA,UACA,UAAU;AAAA,UACV,QAAQ;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAAA,IACD,aAAa,gBAAgB,mBAAmB;AAC9C,YAAM,QAAQ,KAAK,4BAA4B,UAAU,cAAc;AACvE,aAAO,KAAK,kBAAkB,gBAAgB,mBAAmB,KAAK;AAAA,IACvE;AAAA,IACD,kBAAkB,gBAAgB,mBAAmB,KAAK;AACxD,UAAI,oBAAoB,KAAK,mBAAmB,GAAG;AACnD,UAAI;AACJ,UAAI,OAAO,sBAAsB,YAAY;AAC3C,iBAAS,kBAAkB;AAC3B,cAAM,YAAY,kBAAkB;AAEpC,YAAI,cAAc,QAAW;AAC3B,gBAAM,uBAAuB;AAC7B,8BAAoB,MAAM;AACxB,mBAAO,UAAU,KAAK,IAAI,KAAK,qBAAqB,KAAK,IAAI;AAAA,UAC9D;AAAA,QACF;AAAA,MACT,OAAa;AACL,iBAAS;AAAA,MACV;AACD,UAAI,WAAW;AACf,aAAO,kBAAkB,KAAK,IAAI,MAAM,QAAQ,aAAa,MAAM;AACjE,mBAAW,KAAK,mBAAmB,MAAM;AAAA,MAC1C;AAED,WAAK;AAAA,QACH,KAAK;AAAA,QACL,CAAC,gBAAgB,iBAAiB;AAAA,QAClC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAMA;AAAA,MACD;AAAA,IACF;AAAA,IACD,qBAAqB,gBAAgB,SAAS;AAC5C,YAAM,QAAQ,KAAK,4BAA4B,cAAc,cAAc;AAC3E,WAAK,0BAA0B,gBAAgB,SAAS,KAAK;AAAA,IAC9D;AAAA,IACD,0BAA0B,gBAAgB,SAAS,KAAK;AACtD,YAAM,SAAS,QAAQ;AACvB,YAAM,YAAY,QAAQ;AAC1B,YAAM,uBAAuB,KAAK,mBAAmB,GAAG;AAExD,UAAI,qBAAqB,KAAK,IAAI,MAAM,MAAM;AAC5C,eAAO,KAAK,IAAI;AAChB,cAAM,yBAAyB,MAAM;AACnC,iBAAO,KAAK,aAAa,KAAK,GAAG,CAAC,GAAG,SAAS;AAAA,QAC/C;AAED,eAAO,KAAK,aAAa,KAAK,GAAG,CAAC,GAAG,SAAS,MAAM,MAAM;AAGxD,eAAK,QAAQ,SAAS;AAEtB,iBAAO,KAAK,IAAI;AAAA,QACjB;AAED,aAAK;AAAA,UACH,KAAK;AAAA,UACL,CAAC,gBAAgB,WAAW,wBAAwB,QAAQ,8BAA8B;AAAA,UAC1F;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACD;AAAA,MACF;AAAA,IACF;AAAA,IACD,4BAA4B,gBAAgB,WAAW,wBAAwB,QAAQ,yBAAyB;AAC9G,aAAO,uBAAsB,GAAI;AAG/B,aAAK,QAAQ,SAAS;AACtB,eAAO,KAAK,IAAI;AAAA,MACjB;AAOD,WAAK;AAAA,QACH,KAAK;AAAA,QACL,CAAC,gBAAgB,WAAW,wBAAwB,QAAQ,uBAAuB;AAAA,QACnF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA,IACF;AAAA,IACD,mBAAmB,QAAQ;AACzB,YAAM,kBAAkB,KAAK,iBAAkB;AAC/C,aAAO,KAAK,IAAI;AAChB,YAAM,iBAAiB,KAAK,iBAAkB;AAG9C,aAAO,iBAAiB;AAAA,IACzB;AAAA,IACD,WAAW,YAAY,YAAY;AACjC,YAAM,QAAQ,KAAK,4BAA4B,QAAQ,UAAU;AACjE,YAAM,OAAO,UAAU,UAAU,IAAI,aAAa,WAAW;AAC7D,YAAM,SAAS,KAAK,mBAAmB,KAAK;AAC5C,YAAM,eAAe,OAAO,KAAK,MAAM,IAAI;AAC3C,UAAI,iBAAiB,QAAW;AAC9B,cAAM,oBAAoB,KAAK,YAAY;AAC3C,eAAO,kBAAkB,IAAI,KAAK,IAAI;AAAA,MACvC;AACD,WAAK,oBAAoB,YAAY,WAAW,OAAO;AAAA,IACxD;AAAA,IACD,yBAAyB;AACvB,WAAK,WAAW,IAAK;AACrB,WAAK,sBAAsB,IAAK;AAEhC,WAAK,sBAAuB;AAC5B,UAAI,KAAK,WAAW,WAAW,KAAK,KAAK,eAAgB,MAAK,OAAO;AACnE,cAAM,oBAAoB,KAAK,GAAG,CAAC;AACnC,cAAM,SAAS,KAAK,qBAAqB,8BAA8B;AAAA,UACrE,gBAAgB;AAAA,UAChB,UAAU,KAAK,oBAAqB;AAAA,QAC9C,CAAS;AACD,aAAK,WAAW,IAAI,2BAA2B,QAAQ,iBAAiB,CAAC;AAAA,MAC1E;AAAA,IACF;AAAA,IACD,gBAAgB,YAAY,KAAK,SAAS;AACxC,UAAI;AACJ,UAAI;AACF,cAAM,OAAO,YAAY,SAAY,QAAQ,OAAO;AACpD,aAAK,aAAa;AAClB,qBAAa,WAAW,MAAM,MAAM,IAAI;AACxC,aAAK;AAAA,UACH;AAAA,UACA,YAAY,UAAa,QAAQ,UAAU,SAAY,QAAQ,QAAQ,WAAW;AAAA,QACnF;AACD,eAAO;AAAA,MACR,SAAQ,GAAP;AACA,cAAM,KAAK,qBAAqB,GAAG,SAAS,WAAW,QAAQ;AAAA,MAChE;AAAA,IACF;AAAA,IACD,qBAAqB,GAAG,SAAS,UAAU;AACzC,UAAI,uBAAuB,CAAC,KAAK,EAAE,qBAAqB,QAAW;AACjE,aAAK;AAAA,UACH,EAAE;AAAA,UACF,YAAY,UAAa,QAAQ,UAAU,SAAY,QAAQ,QAAQ;AAAA,QACxE;AACD,eAAO,EAAE;AAAA,MACV;AACD,YAAM;AAAA,IACP;AAAA,IACD,gBAAgB,SAAS,KAAK,SAAS;AACrC,UAAI;AACJ,UAAI;AACF,cAAM,YAAY,KAAK,GAAG,CAAC;AAC3B,YAAI,KAAK,aAAa,WAAW,OAAO,MAAM,MAAM;AAClD,eAAK,aAAc;AACnB,0BAAgB;AAAA,QAC1B,OAAe;AACL,eAAK,qBAAqB,SAAS,WAAW,OAAO;AAAA,QACtD;AAAA,MACF,SAAQ,kBAAP;AACA,wBAAgB,KAAK,wBAAwB,SAAS,KAAK,gBAAgB;AAAA,MAC5E;AACD,WAAK;AAAA,QACH,YAAY,UAAa,QAAQ,UAAU,SAAY,QAAQ,QAAQ,QAAQ;AAAA,QAC/E;AAAA,MACD;AACD,aAAO;AAAA,IACR;AAAA,IACD,qBAAqB,SAAS,WAAW,SAAS;AAChD,UAAI;AACJ,YAAM,gBAAgB,KAAK,GAAG,CAAC;AAC/B,UAAI,YAAY,UAAa,QAAQ,SAAS;AAC5C,cAAM,QAAQ;AAAA,MACtB,OAAa;AACL,cAAM,KAAK,qBAAqB,0BAA0B;AAAA,UACxD,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,UAAU;AAAA,UACV,UAAU,KAAK,oBAAqB;AAAA,QAC9C,CAAS;AAAA,MACF;AACD,YAAM,KAAK,WAAW,IAAI,yBAAyB,KAAK,WAAW,aAAa,CAAC;AAAA,IAClF;AAAA,IACD,wBAAwB,SAAS,KAAK,kBAAkB;AAGtD,UACE,KAAK;AAAA,MAEL,iBAAiB,SAAS,8BAC1B,CAAC,KAAK,eAAgB,GACtB;AACA,cAAM,UAAU,KAAK,4BAA4B,SAAS,GAAG;AAC7D,YAAI;AACF,iBAAO,KAAK,kBAAkB,SAAS,OAAO;AAAA,QAC/C,SAAQ,qBAAP;AACA,cAAI,oBAAoB,SAAS,4BAA4B;AAG3D,kBAAM;AAAA,UAClB,OAAiB;AACL,kBAAM;AAAA,UACP;AAAA,QACF;AAAA,MACT,OAAa;AACL,cAAM;AAAA,MACP;AAAA,IACF;AAAA,IACD,iBAAiB;AAEf,YAAM,cAAc,KAAK;AACzB,YAAM,iBAAiB,MAAM,KAAK,UAAU;AAC5C,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,YAAY,KAAK,iBAAkB;AAAA,QACnC,YAAY;AAAA,QACZ,WAAW,KAAK;AAAA,MACjB;AAAA,IACF;AAAA,IACD,iBAAiB,UAAU;AACzB,WAAK,SAAS,SAAS;AACvB,WAAK,iBAAiB,SAAS,UAAU;AACzC,WAAK,aAAa,SAAS;AAAA,IAC5B;AAAA,IACD,0BAA0B,WAAW,UAAU,kBAAkB;AAC/D,WAAK,sBAAsB,KAAK,gBAAgB;AAChD,WAAK,WAAW,KAAK,SAAS;AAE9B,WAAK,yBAAyB,QAAQ;AAAA,IACvC;AAAA,IACD,iBAAiB;AACf,aAAO,KAAK,oBAAoB,WAAW;AAAA,IAC5C;AAAA,IACD,sBAAsB;AACpB,YAAM,YAAY,KAAK,6BAA8B;AACrD,aAAO,KAAK,oBAAoB,SAAS;AAAA,IAC1C;AAAA,IACD,wBAAwB,WAAW;AACjC,aAAO,KAAK,oBAAoB,SAAS;AAAA,IAC1C;AAAA,IACD,iBAAiB;AACf,aAAO,KAAK,aAAa,KAAK,GAAG,CAAC,GAAG,GAAG;AAAA,IACzC;AAAA,IACD,QAAQ;AACN,WAAK,gBAAiB;AACtB,WAAK,aAAa;AAClB,WAAK,sBAAsB,CAAE;AAC7B,WAAK,SAAS,CAAE;AAChB,WAAK,aAAa,CAAE;AAEpB,WAAK,YAAY,CAAE;AACnB,WAAK,wBAAwB,CAAE;AAAA,IAChC;AAAA,EACF;AAKD,QAAM,aAAa;AAAA,IACjB,iBAAiB,QAAQ;AACvB,WAAK,UAAU,CAAE;AACjB,WAAK,uBAAuB,IAAI,QAAQ,sBAAsB,IAC1D,OAAO,uBACP,sBAAsB;AAAA,IAC3B;AAAA,IACD,WAAW,OAAO;AAChB,UAAI,uBAAuB,KAAK,GAAG;AACjC,cAAM,UAAU;AAAA,UACd,WAAW,KAAK,0BAA2B;AAAA,UAC3C,qBAAqB,MAAM,KAAK,qBAAqB;AAAA,QACtD;AACD,aAAK,QAAQ,KAAK,KAAK;AACvB,eAAO;AAAA,MACf,OAAa;AACL,cAAM,MAAM,6DAA6D;AAAA,MAC1E;AAAA,IACF;AAAA,IACD,IAAI,SAAS;AACX,aAAO,MAAM,KAAK,OAAO;AAAA,IAC1B;AAAA,IACD,IAAI,OAAO,WAAW;AACpB,WAAK,UAAU;AAAA,IAChB;AAAA;AAAA,IAED,wBAAwB,YAAY,UAAU,mBAAmB;AAC/D,YAAM,WAAW,KAAK,oBAAqB;AAC3C,YAAM,cAAc,KAAK,mBAAkB,EAAG,QAAQ;AACtD,YAAM,+BAA+B;AAAA,QACnC;AAAA,QACA;AAAA,QACA;AAAA,QACA,KAAK;AAAA,MACN;AACD,YAAM,kBAAkB,6BAA6B,CAAC;AACtD,YAAM,eAAe,CAAE;AACvB,eAAS,IAAI,GAAG,KAAK,KAAK,cAAc,KAAK;AAC3C,qBAAa,KAAK,KAAK,GAAG,CAAC,CAAC;AAAA,MAC7B;AACD,YAAM,MAAM,KAAK,qBAAqB,sBAAsB;AAAA,QAC1D,wBAAwB;AAAA,QACxB,QAAQ;AAAA,QACR,UAAU,KAAK,GAAG,CAAC;AAAA,QACnB,uBAAuB;AAAA,QACvB;AAAA,MACR,CAAO;AACD,YAAM,KAAK,WAAW,IAAI,mBAAmB,KAAK,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC;AAAA,IAC1E;AAAA;AAAA,IAED,oBAAoB,YAAY,aAAa;AAC3C,YAAM,WAAW,KAAK,oBAAqB;AAC3C,YAAM,cAAc,KAAK,mBAAkB,EAAG,QAAQ;AAEtD,YAAM,+BAA+B,uBAAuB,YAAY,aAAa,KAAK,YAAY;AACtG,YAAM,eAAe,CAAE;AACvB,eAAS,IAAI,GAAG,KAAK,KAAK,cAAc,KAAK;AAC3C,qBAAa,KAAK,KAAK,GAAG,CAAC,CAAC;AAAA,MAC7B;AACD,YAAM,gBAAgB,KAAK,GAAG,CAAC;AAC/B,YAAM,SAAS,KAAK,qBAAqB,wBAAwB;AAAA,QAC/D,qBAAqB;AAAA,QACrB,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,uBAAuB;AAAA,QACvB,UAAU,KAAK,oBAAqB;AAAA,MAC5C,CAAO;AACD,YAAM,KAAK,WAAW,IAAI,qBAAqB,QAAQ,KAAK,GAAG,CAAC,GAAG,aAAa,CAAC;AAAA,IAClF;AAAA,EACF;AAED,QAAM,cAAc;AAAA,IAClB,oBAAoB;AAAA,IAAE;AAAA,IACtB,qBAAqB,eAAe,gBAAgB;AAClD,YAAM,gBAAgB,KAAK,qBAAqB,aAAa;AAC7D,UAAI,YAAY,aAAa,GAAG;AAC9B,cAAM,MAAM,UAAU,iDAAiD;AAAA,MACxE;AACD,aAAO,wBAAwB,CAAC,aAAa,GAAG,gBAAgB,KAAK,cAAc,KAAK,YAAY;AAAA,IACrG;AAAA;AAAA;AAAA,IAGD,0BAA0B,aAAa;AACrC,YAAM,cAAc,KAAK,YAAY,SAAS;AAC9C,YAAM,kBAAkB,KAAK,mBAAoB;AACjD,YAAM,gBAAgB,gBAAgB,WAAW;AACjD,YAAM,yBAAyB,IAAI,qBAAqB,eAAe,WAAW,EAAE,aAAc;AAClG,aAAO;AAAA,IACR;AAAA,EACF;AAED,QAAM,wBAAwB;AAAA,IAC5B,aAAa;AAAA,EACd;AACD,SAAO,OAAO,qBAAqB;AACnC,QAAM,mBAAmB;AACzB,QAAM,iBAAiB,KAAK,IAAI,GAAG,uBAAuB,IAAI;AAC9D,QAAM,MAAMT,aAAY,EAAE,MAAM,yBAAyB,SAASJ,OAAM,IAAI;AAC5E,oBAAkB,CAAC,GAAG,CAAC;AACvB,QAAM,wBAAwB;AAAA,IAC5B;AAAA,IACA;AAAA;AAAA;AAAA,IAKA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD,SAAO,OAAO,qBAAqB;AACnC,QAAM,0BAA0B;AAAA,IAC9B,MACE;AAAA,IAEF,UAAU,CAAE;AAAA,EACb;AAID,QAAM,aAAa;AAAA,IACjB,iBAAiB,QAAQ;AACvB,WAAK,qBAAqB,CAAE;AAC5B,WAAK,kBAAkB;AAAA,IACxB;AAAA,IACD,kBAAkB;AAChB,WAAK,kBAAkB;AACvB,WAAK,WAAW,oBAAoB,MAAM;AAUxC,iBAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,gBAAM,MAAM,IAAI,IAAI,IAAI;AACxB,eAAK,UAAU,KAAK,IAAI,SAAU,MAAM,MAAM;AAC5C,mBAAO,KAAK,sBAAsB,MAAM,GAAG,IAAI;AAAA,UAChD;AACD,eAAK,UAAU,KAAK,IAAI,SAAU,MAAM,MAAM;AAC5C,mBAAO,KAAK,sBAAsB,MAAM,GAAG,IAAI;AAAA,UAChD;AACD,eAAK,SAAS,KAAK,IAAI,SAAU,MAAM;AACrC,mBAAO,KAAK,qBAAqB,MAAM,CAAC;AAAA,UACzC;AACD,eAAK,KAAK,KAAK,IAAI,SAAU,MAAM;AACjC,mBAAO,KAAK,iBAAiB,MAAM,CAAC;AAAA,UACrC;AACD,eAAK,OAAO,KAAK,IAAI,SAAU,MAAM;AACnC,iBAAK,mBAAmB,GAAG,IAAI;AAAA,UAChC;AACD,eAAK,WAAW,KAAK,IAAI,SAAU,MAAM;AACvC,iBAAK,2BAA2B,GAAG,IAAI;AAAA,UACxC;AACD,eAAK,eAAe,KAAK,IAAI,SAAU,MAAM;AAC3C,iBAAK,yBAAyB,GAAG,IAAI;AAAA,UACtC;AACD,eAAK,mBAAmB,KAAK,IAAI,SAAU,MAAM;AAC/C,iBAAK,iCAAiC,GAAG,IAAI;AAAA,UAC9C;AAAA,QACF;AAED,aAAK,SAAS,IAAI,SAAU,KAAK,MAAM,MAAM;AAC3C,iBAAO,KAAK,sBAAsB,MAAM,KAAK,IAAI;AAAA,QAClD;AACD,aAAK,SAAS,IAAI,SAAU,KAAK,MAAM,MAAM;AAC3C,iBAAO,KAAK,sBAAsB,MAAM,KAAK,IAAI;AAAA,QAClD;AACD,aAAK,QAAQ,IAAI,SAAU,KAAK,MAAM;AACpC,iBAAO,KAAK,qBAAqB,MAAM,GAAG;AAAA,QAC3C;AACD,aAAK,IAAI,IAAI,SAAU,KAAK,MAAM;AAChC,iBAAO,KAAK,iBAAiB,MAAM,GAAG;AAAA,QACvC;AACD,aAAK,MAAM,IAAI,SAAU,KAAK,MAAM;AAClC,eAAK,mBAAmB,KAAK,IAAI;AAAA,QAClC;AACD,aAAK,YAAY,IAAI,SAAU,KAAK,MAAM;AACxC,eAAK,yBAAyB,KAAK,IAAI;AAAA,QACxC;AACD,aAAK,SAAS,KAAK;AACnB,aAAK,YAAY,KAAK;AACtB,aAAK,KAAK,KAAK;AAAA,MACvB,CAAO;AAAA,IACF;AAAA,IACD,mBAAmB;AACjB,WAAK,kBAAkB;AAKvB,WAAK,WAAW,8BAA8B,MAAM;AAClD,cAAM,OAAO;AACb,iBAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,gBAAM,MAAM,IAAI,IAAI,IAAI;AACxB,iBAAO,KAAK,UAAU,KAAK;AAC3B,iBAAO,KAAK,UAAU,KAAK;AAC3B,iBAAO,KAAK,SAAS,KAAK;AAC1B,iBAAO,KAAK,KAAK,KAAK;AACtB,iBAAO,KAAK,OAAO,KAAK;AACxB,iBAAO,KAAK,WAAW,KAAK;AAC5B,iBAAO,KAAK,eAAe,KAAK;AAChC,iBAAO,KAAK,mBAAmB,KAAK;AAAA,QACrC;AACD,eAAO,KAAK,SAAS;AACrB,eAAO,KAAK,SAAS;AACrB,eAAO,KAAK,QAAQ;AACpB,eAAO,KAAK,IAAI;AAChB,eAAO,KAAK,MAAM;AAClB,eAAO,KAAK,YAAY;AACxB,eAAO,KAAK;AACZ,eAAO,KAAK;AACZ,eAAO,KAAK;AAAA,MACpB,CAAO;AAAA,IACF;AAAA;AAAA;AAAA;AAAA,IAID,cAAc,MAAM;AAAA,IAEnB;AAAA;AAAA,IAED,iBAAiB,aAAa,MAAM;AAClC,aAAO,MAAM;AAAA,IACd;AAAA;AAAA;AAAA,IAGD,UAAU,SAAS;AAGjB,aAAO;AAAA,IACR;AAAA,IACD,mBAAmB,MAAM,KAAK;AAC5B,UAAI;AACF,cAAM,kBAAkB,IAAI,KAAK,EAAE,YAAY,IAAI,MAAY;AAC/D,wBAAgB,OAAO;AACvB,aAAK,mBAAmB,KAAK,eAAe;AAC5C,YAAI,KAAK,IAAI;AACb,aAAK,mBAAmB,IAAK;AAC7B,eAAO;AAAA,MACR,SAAQ,eAAP;AACA,YAAI,cAAc,yBAAyB,MAAM;AAC/C,cAAI;AACF,0BAAc,UACZ,cAAc,UACd;AAAA,UAEH,SAAQ,iBAAP;AAEA,kBAAM;AAAA,UACP;AAAA,QACF;AACD,cAAM;AAAA,MACP;AAAA,IACF;AAAA;AAAA,IAED,qBAAqB,mBAAmB,YAAY;AAClD,aAAO,WAAW,KAAK,MAAM,QAAQ,mBAAmB,UAAU;AAAA,IACnE;AAAA,IACD,yBAAyB,YAAY,mBAAmB;AACtD,iBAAW,KAAK,MAAM,qBAAqB,mBAAmB,UAAU;AAAA,IACzE;AAAA,IACD,iCAAiC,YAAY,SAAS;AACpD,iBAAW,KAAK,MAAM,kCAAkC,SAAS,YAAY,gBAAgB;AAAA,IAC9F;AAAA,IACD,mBAAmB,YAAY,mBAAmB;AAChD,iBAAW,KAAK,MAAM,YAAY,mBAAmB,UAAU;AAAA,IAChE;AAAA,IACD,2BAA2B,YAAY,SAAS;AAC9C,iBAAW,KAAK,MAAM,yBAAyB,SAAS,YAAY,gBAAgB;AAAA,IACrF;AAAA,IACD,iBAAiB,YAAY,YAAY;AACvC,aAAO,aAAa,KAAK,MAAM,YAAY,UAAU;AAAA,IACtD;AAAA,IACD,sBAAsB,YAAY,YAAY,SAAS;AACrD,6BAAuB,UAAU;AACjC,UAAI,CAAC,cAAc,IAAI,YAAY,UAAU,MAAM,OAAO;AACxD,cAAM,QAAQ,IAAI;AAAA,UAChB,WAAW,aAAa,UAAU,wEACkB,KAAK,UAAU,UAAU;AAAA,2BAC7C,KAAK,mBAAmB,CAAC,EAAE;AAAA,QAC5D;AACD,cAAM,uBAAuB;AAC7B,cAAM;AAAA,MACP;AACD,YAAM,WAAW,KAAK,KAAK,kBAAkB;AAC7C,YAAM,WAAW,WAAW;AAC5B,YAAM,kBAAkB,IAAI,YAAY;AAAA,QACtC,KAAK;AAAA,QACL,iBAAiB;AAAA,QACjB,OAAO,YAAY,QAAQ,YAAY,SAAS,SAAS,QAAQ;AAAA;AAAA,QAEjE,gBAAgB;AAAA,MACxB,CAAO;AACD,eAAS,WAAW,KAAK,eAAe;AACxC,aAAO,KAAK,YAAY,0BAA0B;AAAA,IACnD;AAAA,IACD,sBAAsB,SAAS,YAAY,SAAS;AAClD,6BAAuB,UAAU;AACjC,UAAI,CAAC,oBAAoB,OAAO,GAAG;AACjC,cAAM,QAAQ,IAAI;AAAA,UAChB,WAAW,aAAa,UAAU,oEACc,KAAK,UAAU,OAAO;AAAA,2BACtC,KAAK,mBAAmB,CAAC,EAAE;AAAA,QAC5D;AACD,cAAM,uBAAuB;AAC7B,cAAM;AAAA,MACP;AACD,YAAM,WAAW,KAAK,KAAK,kBAAkB;AAC7C,YAAM,kBAAkB,IAAI,SAAS;AAAA,QACnC,KAAK;AAAA,QACL,cAAc;AAAA,QACd,OAAO,YAAY,QAAQ,YAAY,SAAS,SAAS,QAAQ;AAAA,MACzE,CAAO;AACD,eAAS,WAAW,KAAK,eAAe;AACxC,aAAO;AAAA,IACR;AAAA,EACF;AACD,WAAS,WAAW,iBAAiB,aAAa,YAAY,YAAY,OAAO;AAC/E,2BAAuB,UAAU;AACjC,UAAM,WAAW,KAAK,KAAK,kBAAkB;AAC7C,UAAM,gBAAgB,WAAW,WAAW,IAAI,cAAc,YAAY;AAC1E,UAAM,UAAU,IAAI,gBAAgB,EAAE,YAAY,IAAI,KAAK,YAAY;AACvE,QAAI,WAAW;AACb,cAAQ,YAAY,YAAY;AAAA,IACjC;AACD,QAAI,IAAI,aAAa,eAAe,GAAG;AACrC,cAAQ,eAAe,YAAY;AAAA,IACpC;AACD,SAAK,mBAAmB,KAAK,OAAO;AACpC,kBAAc,KAAK,IAAI;AACvB,aAAS,WAAW,KAAK,OAAO;AAChC,SAAK,mBAAmB,IAAK;AAC7B,WAAO;AAAA,EACR;AACD,WAAS,aAAa,aAAa,YAAY;AAC7C,2BAAuB,UAAU;AACjC,UAAM,WAAW,KAAK,KAAK,kBAAkB;AAE7C,UAAM,aAAa,UAAU,WAAW,MAAM;AAC9C,UAAM,OAAO,eAAe,QAAQ,cAAc,YAAY;AAC9D,UAAM,YAAY,IAAI,YAAY;AAAA,MAChC,YAAY,CAAE;AAAA,MACd,KAAK;AAAA,MACL,mBAAmB,cAAc,YAAY,uBAAuB;AAAA,IAC1E,CAAK;AACD,QAAI,IAAI,aAAa,eAAe,GAAG;AACrC,gBAAU,eAAe,YAAY;AAAA,IACtC;AACD,UAAM,gBAAgB,KAAK,MAAM,CAAC,YAAY,WAAW,QAAQ,IAAI,CAAC;AACtE,cAAU,gBAAgB;AAC1B,aAAS,WAAW,KAAK,SAAS;AAClC,YAAQ,MAAM,CAAC,YAAY;AACzB,YAAM,cAAc,IAAI,YAAY,EAAE,YAAY,CAAE,EAAA,CAAE;AACtD,gBAAU,WAAW,KAAK,WAAW;AACrC,UAAI,IAAI,SAAS,oBAAoB,GAAG;AACtC,oBAAY,oBAAoB,QAAQ;AAAA,MACzC,WAEQ,IAAI,SAAS,MAAM,GAAG;AAC7B,oBAAY,oBAAoB;AAAA,MACjC;AACD,WAAK,mBAAmB,KAAK,WAAW;AACxC,cAAQ,IAAI,KAAK,IAAI;AACrB,WAAK,mBAAmB,IAAK;AAAA,IACnC,CAAK;AACD,WAAO;AAAA,EACR;AACD,WAAS,aAAa,KAAK;AACzB,WAAO,QAAQ,IAAI,KAAK,GAAG;AAAA,EAC5B;AACD,WAAS,uBAAuB,KAAK;AACnC,QAAI,MAAM,KAAK,MAAM,gBAAgB;AACnC,YAAM,QAAQ,IAAI;AAAA;AAAA,QAEhB,kCAAkC;AAAA,wDACwB,iBAAiB;AAAA,MAC5E;AACD,YAAM,uBAAuB;AAC7B,YAAM;AAAA,IACP;AAAA,EACF;AAKD,QAAM,kBAAkB;AAAA,IACtB,sBAAsB,QAAQ;AAC5B,UAAI,IAAI,QAAQ,eAAe,GAAG;AAChC,cAAM,oBAAoB,OAAO;AACjC,cAAM,gBAAgB,OAAO,sBAAsB;AACnD,aAAK,oBAAoB,gBAAgB,oBAAoB;AAC7D,aAAK,gBAAgB,gBAAgB,oBAAoB,IAAI;AAAA,MACrE,OAAa;AACL,aAAK,oBAAoB;AACzB,aAAK,gBAAgB,sBAAsB;AAAA,MAC5C;AACD,WAAK,kBAAkB;AAAA,IACxB;AAAA,IACD,WAAW,WAAW,WAAW;AAG/B,UAAI,KAAK,kBAAkB,MAAM;AAC/B,aAAK;AACL,cAAM,SAAS,IAAI,MAAM,KAAK,kBAAkB,CAAC,EAAE,KAAK,GAAI;AAC5D,YAAI,KAAK,kBAAkB,KAAK,mBAAmB;AACjD,kBAAQ,IAAI,GAAG,cAAc,YAAY;AAAA,QAC1C;AACD,cAAM,EAAE,MAAM,UAAU,MAAM,SAAS;AAEvC,cAAM,cAAc,OAAO,KAAK,QAAQ,OAAO,QAAQ;AACvD,YAAI,KAAK,kBAAkB,KAAK,mBAAmB;AACjD,sBAAY,GAAG,cAAc,oBAAoB,QAAQ;AAAA,QAC1D;AACD,aAAK;AACL,eAAO;AAAA,MACf,OAAa;AACL,eAAO,UAAW;AAAA,MACnB;AAAA,IACF;AAAA,EACF;AAED,WAAS,YAAY,aAAa,WAAW;AAC3C,cAAU,QAAQ,CAAC,aAAa;AAC9B,YAAM,YAAY,SAAS;AAC3B,aAAO,oBAAoB,SAAS,EAAE,QAAQ,CAAC,aAAa;AAC1D,YAAI,aAAa,eAAe;AAC9B;AAAA,QACD;AACD,cAAM,qBAAqB,OAAO,yBAAyB,WAAW,QAAQ;AAE9E,YAAI,uBAAuB,mBAAmB,OAAO,mBAAmB,MAAM;AAC5E,iBAAO,eAAe,YAAY,WAAW,UAAU,kBAAkB;AAAA,QACnF,OAAe;AACL,sBAAY,UAAU,QAAQ,IAAI,SAAS,UAAU,QAAQ;AAAA,QAC9D;AAAA,MACT,CAAO;AAAA,IACP,CAAK;AAAA,EACF;AAED,QAAM,cAAc,oBAAoB,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAC7E,SAAO,OAAO,WAAW;AACzB,QAAM,wBAAwB,OAAO,OAAO;AAAA,IAC1C,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,sBAAsB;AAAA,IACtB,WAAW;AAAA,IACX,sBAAsB;AAAA,IACtB,sBAAsB;AAAA,IACtB,eAAe;AAAA,IACf,iBAAiB;AAAA,EACrB,CAAG;AACD,QAAM,sBAAsB,OAAO,OAAO;AAAA,IACxC,mBAAmB,MAAM;AAAA,IACzB,eAAe;AAAA,EACnB,CAAG;AACD,MAAI;AACH,GAAC,SAAUc,4BAA2B;AACrC,IAAAA,2BAA2BA,2BAA0B,mBAAmB,IAAI,CAAG,IAAG;AAClF,IAAAA,2BAA2BA,2BAA0B,qBAAqB,IAAI,CAAG,IAAG;AACpF,IAAAA,2BAA2BA,2BAA0B,uBAAuB,IAAI,CAAG,IAAG;AACtF,IAAAA,2BAA2BA,2BAA0B,uBAAuB,IAAI,CAAG,IAAG;AACtF,IAAAA,2BAA2BA,2BAA0B,wBAAwB,IAAI,CAAG,IAAG;AACvF,IAAAA,2BAA2BA,2BAA0B,gBAAgB,IAAI,CAAG,IAAG;AAC/E,IAAAA,2BAA2BA,2BAA0B,qBAAqB,IAAI,CAAG,IAAG;AACpF,IAAAA,2BAA2BA,2BAA0B,gBAAgB,IAAI,CAAG,IAAG;AAC/E,IAAAA,2BAA2BA,2BAA0B,iCAAiC,IAAI,CAAG,IAC3F;AACF,IAAAA,2BAA2BA,2BAA0B,oBAAoB,IAAI,CAAG,IAAG;AACnF,IAAAA,2BAA2BA,2BAA0B,wBAAwB,IAAI,EAAI,IAAG;AACxF,IAAAA,2BAA2BA,2BAA0B,uBAAuB,IAAI,EAAI,IAAG;AACvF,IAAAA,2BAA2BA,2BAA0B,eAAe,IAAI,EAAI,IAAG;AAC/E,IAAAA,2BAA2BA,2BAA0B,6BAA6B,IAAI,EAAI,IACxF;AAAA,EACN,GAAK,8BAA8B,4BAA4B,CAAA,EAAG;AAChE,QAAM,OAAO;AAAA;AAAA;AAAA;AAAA,IAIX,OAAO,oBAAoB,gBAAgB;AACzC,YAAM;AAAA,QACJ;AAAA,MAED;AAAA,IACF;AAAA,IACD,sBAAsB;AACpB,WAAK,WAAW,uBAAuB,MAAM;AAC3C,YAAI;AACJ,aAAK,mBAAmB;AACxB,cAAM,YAAY,KAAK;AACvB,aAAK,WAAW,eAAe,MAAM;AAInC,2BAAiB,IAAI;AAAA,QAC/B,CAAS;AACD,aAAK,WAAW,qBAAqB,MAAM;AACzC,cAAI;AACF,iBAAK,gBAAiB;AAEtB,oBAAQ,KAAK,mBAAmB,CAAC,iBAAiB;AAChD,oBAAM,cAAc,KAAK,YAAY;AACrC,oBAAM,wBAAwB,YAAY,uBAAuB;AACjE,kBAAI;AACJ,mBAAK,WAAW,GAAG,qBAAqB,MAAM;AAC5C,mCAAmB,KAAK,mBAAmB,cAAc,qBAAqB;AAAA,cAC9F,CAAe;AACD,mBAAK,qBAAqB,YAAY,IAAI;AAAA,YACxD,CAAa;AAAA,UACb,UAAoB;AACR,iBAAK,iBAAkB;AAAA,UACxB;AAAA,QACX,CAAS;AACD,YAAI,iBAAiB,CAAE;AACvB,aAAK,WAAW,qBAAqB,MAAM;AACzC,2BAAiB,eAAe;AAAA,YAC9B,OAAO,OAAO,KAAK,oBAAoB;AAAA,UACnD,CAAW;AACD,eAAK,mBAAmB,KAAK,iBAAiB,OAAO,cAAc;AAAA,QAC7E,CAAS;AACD,aAAK,WAAW,uBAAuB,MAAM;AAG3C,cAAI,QAAQ,cAAc,KAAK,KAAK,oBAAoB,OAAO;AAC7D,kBAAM,mBAAmB,gBAAgB;AAAA,cACvC,OAAO,OAAO,KAAK,oBAAoB;AAAA,cACvC,YAAY,OAAO,KAAK,SAAS;AAAA,cACjC,gBAAgB;AAAA,cAChB,aAAa;AAAA,YAC3B,CAAa;AACD,kBAAM,4BAA4B,kBAAkB;AAAA,cAClD,mBAAmB,KAAK;AAAA,cACxB,OAAO,OAAO,KAAK,oBAAoB;AAAA,cACvC,YAAY,OAAO,KAAK,SAAS;AAAA,cACjC,aAAa;AAAA,YAC3B,CAAa;AACD,iBAAK,mBAAmB,KAAK,iBAAiB,OAAO,kBAAkB,yBAAyB;AAAA,UACjG;AAAA,QACX,CAAS;AAED,YAAI,QAAQ,KAAK,gBAAgB,GAAG;AAElC,cAAI,KAAK,iBAAiB;AACxB,iBAAK,WAAW,0BAA0B,MAAM;AAC9C,oBAAM,aAAa,uBAAuB,OAAO,KAAK,oBAAoB,CAAC;AAC3E,mBAAK,gBAAgB;AAAA,YACnC,CAAa;AAAA,UACF;AACD,eAAK,WAAW,6BAA6B,MAAM;AACjD,gBAAI,IAAI;AACP,aAAC,MAAM,KAAK,KAAK,mBAAmB,gBAAgB,QAAQ,OAAO,SAChE,SACA,GAAG,KAAK,IAAI;AAAA,cACV,OAAO,OAAO,KAAK,oBAAoB;AAAA,YACzD,CAAiB;AACL,iBAAK,6BAA6B,OAAO,KAAK,oBAAoB,CAAC;AAAA,UAC/E,CAAW;AAAA,QACF;AACD,YAAI,CAAC,OAAO,oCAAoC,CAAC,QAAQ,KAAK,gBAAgB,GAAG;AAC/E,0BAAgB,IAAI,KAAK,kBAAkB,CAAC,aAAa,SAAS,OAAO;AACzE,gBAAM,IAAI;AAAA,YACR;AAAA,GAAwC,cAAc,KAAK,qCAAqC;AAAA,UACjG;AAAA,QACF;AAAA,MACT,CAAO;AAAA,IACF;AAAA,IACD,YAAY,iBAAiB,QAAQ;AACnC,WAAK,mBAAmB,CAAE;AAC1B,WAAK,mBAAmB;AACxB,YAAM,OAAO;AACb,WAAK,iBAAiB,MAAM;AAC5B,WAAK,iBAAkB;AACvB,WAAK,eAAe,MAAM;AAC1B,WAAK,qBAAqB,iBAAiB,MAAM;AACjD,WAAK,gBAAgB,MAAM;AAC3B,WAAK,gBAAgB,MAAM;AAC3B,WAAK,kBAAmB;AACxB,WAAK,iBAAiB,MAAM;AAC5B,WAAK,sBAAsB,MAAM;AACjC,UAAI,IAAI,QAAQ,eAAe,GAAG;AAChC,cAAM,IAAI;AAAA,UACR;AAAA,QAID;AAAA,MACF;AACD,WAAK,kBAAkB,IAAI,QAAQ,iBAAiB,IAChD,OAAO,kBACP,sBAAsB;AAAA,IAC3B;AAAA,EACF;AAOD,SAAO,mCAAmC;AAC1C,cAAY,QAAQ;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,CAAG;AACD,QAAMC,mBAAkB,OAAO;AAAA,IAC7B,YAAY,iBAAiB,SAAS,uBAAuB;AAC3D,YAAM,cAAc,MAAM,MAAM;AAChC,kBAAY,YAAY;AACxB,YAAM,iBAAiB,WAAW;AAAA,IACnC;AAAA,EACF;AAED,SAAO,EAAE,WAAAA,YAAW,OAAAf,QAAO,aAAAI,aAAa;AAC1C,GAAC;;;;"}
|
1
|
+
{"version":3,"file":"chevrotain.cjs","sources":["../../src/libs/chevrotain.js"],"sourcesContent":["const { CstParser, Lexer, createToken } = /* @__PURE__ */ (() => {\n /** Detect free variable `global` from Node.js. */\n var freeGlobal = typeof global == 'object' && global && global.Object === Object && global\n\n const freeGlobal$1 = freeGlobal\n\n /** Detect free variable `self`. */\n var freeSelf = typeof self == 'object' && self && self.Object === Object && self\n\n /** Used as a reference to the global object. */\n var root = freeGlobal$1 || freeSelf || Function('return this')()\n\n const root$1 = root\n\n /** Built-in value references. */\n var Symbol$1 = root$1.Symbol\n\n const Symbol$2 = Symbol$1\n\n /** Used for built-in method references. */\n var objectProto$j = Object.prototype\n\n /** Used to check objects for own properties. */\n var hasOwnProperty$g = objectProto$j.hasOwnProperty\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var nativeObjectToString$1 = objectProto$j.toString\n\n /** Built-in value references. */\n var symToStringTag$1 = Symbol$2 ? Symbol$2.toStringTag : undefined\n\n /**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n function getRawTag(value) {\n var isOwn = hasOwnProperty$g.call(value, symToStringTag$1),\n tag = value[symToStringTag$1]\n\n try {\n value[symToStringTag$1] = undefined\n var unmasked = true\n } catch (e) {}\n\n var result = nativeObjectToString$1.call(value)\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag$1] = tag\n } else {\n delete value[symToStringTag$1]\n }\n }\n return result\n }\n\n /** Used for built-in method references. */\n var objectProto$i = Object.prototype\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var nativeObjectToString = objectProto$i.toString\n\n /**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n function objectToString(value) {\n return nativeObjectToString.call(value)\n }\n\n /** `Object#toString` result references. */\n var nullTag = '[object Null]',\n undefinedTag = '[object Undefined]'\n\n /** Built-in value references. */\n var symToStringTag = Symbol$2 ? Symbol$2.toStringTag : undefined\n\n /**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n function baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag\n }\n return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value)\n }\n\n /**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n function isObjectLike(value) {\n return value != null && typeof value == 'object'\n }\n\n /** `Object#toString` result references. */\n var symbolTag$3 = '[object Symbol]'\n\n /**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n function isSymbol(value) {\n return typeof value == 'symbol' || (isObjectLike(value) && baseGetTag(value) == symbolTag$3)\n }\n\n /**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length)\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array)\n }\n return result\n }\n\n /**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n var isArray = Array.isArray\n\n const isArray$1 = isArray\n\n /** Used as references for various `Number` constants. */\n var INFINITY$3 = 1 / 0\n\n /** Used to convert symbols to primitives and strings. */\n var symbolProto$2 = Symbol$2 ? Symbol$2.prototype : undefined,\n symbolToString = symbolProto$2 ? symbolProto$2.toString : undefined\n\n /**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\n function baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value\n }\n if (isArray$1(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + ''\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : ''\n }\n var result = value + ''\n return result == '0' && 1 / value == -INFINITY$3 ? '-0' : result\n }\n\n /** Used to match a single whitespace character. */\n var reWhitespace = /\\s/\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\n function trimmedEndIndex(string) {\n var index = string.length\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index\n }\n\n /** Used to match leading whitespace. */\n var reTrimStart = /^\\s+/\n\n /**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\n function baseTrim(string) {\n return string ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') : string\n }\n\n /**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n function isObject(value) {\n var type = typeof value\n return value != null && (type == 'object' || type == 'function')\n }\n\n /** Used as references for various `Number` constants. */\n var NAN = 0 / 0\n\n /** Used to detect bad signed hexadecimal string values. */\n var reIsBadHex = /^[-+]0x[0-9a-f]+$/i\n\n /** Used to detect binary string values. */\n var reIsBinary = /^0b[01]+$/i\n\n /** Used to detect octal string values. */\n var reIsOctal = /^0o[0-7]+$/i\n\n /** Built-in method references without a dependency on `root`. */\n var freeParseInt = parseInt\n\n /**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n function toNumber(value) {\n if (typeof value == 'number') {\n return value\n }\n if (isSymbol(value)) {\n return NAN\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value\n value = isObject(other) ? other + '' : other\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value\n }\n value = baseTrim(value)\n var isBinary = reIsBinary.test(value)\n return isBinary || reIsOctal.test(value)\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : reIsBadHex.test(value)\n ? NAN\n : +value\n }\n\n /** Used as references for various `Number` constants. */\n var INFINITY$2 = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e308\n\n /**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\n function toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0\n }\n value = toNumber(value)\n if (value === INFINITY$2 || value === -INFINITY$2) {\n var sign = value < 0 ? -1 : 1\n return sign * MAX_INTEGER\n }\n return value === value ? value : 0\n }\n\n /**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\n function toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1\n\n return result === result ? (remainder ? result - remainder : result) : 0\n }\n\n /**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\n function identity(value) {\n return value\n }\n\n /** `Object#toString` result references. */\n var asyncTag = '[object AsyncFunction]',\n funcTag$2 = '[object Function]',\n genTag$1 = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]'\n\n /**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n function isFunction(value) {\n if (!isObject(value)) {\n return false\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value)\n return tag == funcTag$2 || tag == genTag$1 || tag == asyncTag || tag == proxyTag\n }\n\n /** Used to detect overreaching core-js shims. */\n var coreJsData = root$1['__core-js_shared__']\n\n const coreJsData$1 = coreJsData\n\n /** Used to detect methods masquerading as native. */\n var maskSrcKey = (function () {\n var uid = /[^.]+$/.exec((coreJsData$1 && coreJsData$1.keys && coreJsData$1.keys.IE_PROTO) || '')\n return uid ? 'Symbol(src)_1.' + uid : ''\n })()\n\n /**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n function isMasked(func) {\n return !!maskSrcKey && maskSrcKey in func\n }\n\n /** Used for built-in method references. */\n var funcProto$1 = Function.prototype\n\n /** Used to resolve the decompiled source of functions. */\n var funcToString$1 = funcProto$1.toString\n\n /**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\n function toSource(func) {\n if (func != null) {\n try {\n return funcToString$1.call(func)\n } catch (e) {}\n try {\n return func + ''\n } catch (e) {}\n }\n return ''\n }\n\n /**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g\n\n /** Used to detect host constructors (Safari). */\n var reIsHostCtor = /^\\[object .+?Constructor\\]$/\n\n /** Used for built-in method references. */\n var funcProto = Function.prototype,\n objectProto$h = Object.prototype\n\n /** Used to resolve the decompiled source of functions. */\n var funcToString = funcProto.toString\n\n /** Used to check objects for own properties. */\n var hasOwnProperty$f = objectProto$h.hasOwnProperty\n\n /** Used to detect if a method is native. */\n var reIsNative = RegExp(\n '^' +\n funcToString\n .call(hasOwnProperty$f)\n .replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') +\n '$',\n )\n\n /**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n function baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor\n return pattern.test(toSource(value))\n }\n\n /**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function getValue(object, key) {\n return object == null ? undefined : object[key]\n }\n\n /**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n function getNative(object, key) {\n var value = getValue(object, key)\n return baseIsNative(value) ? value : undefined\n }\n\n /* Built-in method references that are verified to be native. */\n var WeakMap = getNative(root$1, 'WeakMap')\n\n const WeakMap$1 = WeakMap\n\n /** Built-in value references. */\n var objectCreate = Object.create\n\n /**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\n var baseCreate = (function () {\n function object() {}\n return function (proto) {\n if (!isObject(proto)) {\n return {}\n }\n if (objectCreate) {\n return objectCreate(proto)\n }\n object.prototype = proto\n var result = new object()\n object.prototype = undefined\n return result\n }\n })()\n\n const baseCreate$1 = baseCreate\n\n /**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\n function apply(func, thisArg, args) {\n switch (args.length) {\n case 0:\n return func.call(thisArg)\n case 1:\n return func.call(thisArg, args[0])\n case 2:\n return func.call(thisArg, args[0], args[1])\n case 3:\n return func.call(thisArg, args[0], args[1], args[2])\n }\n return func.apply(thisArg, args)\n }\n\n /**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\n function noop() {\n // No operation performed.\n }\n\n /**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\n function copyArray(source, array) {\n var index = -1,\n length = source.length\n\n array || (array = Array(length))\n while (++index < length) {\n array[index] = source[index]\n }\n return array\n }\n\n /** Used to detect hot functions by number of calls within a span of milliseconds. */\n var HOT_COUNT = 800,\n HOT_SPAN = 16\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeNow = Date.now\n\n /**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\n function shortOut(func) {\n var count = 0,\n lastCalled = 0\n\n return function () {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled)\n\n lastCalled = stamp\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0]\n }\n } else {\n count = 0\n }\n return func.apply(undefined, arguments)\n }\n }\n\n /**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\n function constant(value) {\n return function () {\n return value\n }\n }\n\n var defineProperty = (function () {\n try {\n var func = getNative(Object, 'defineProperty')\n func({}, '', {})\n return func\n } catch (e) {}\n })()\n\n const defineProperty$1 = defineProperty\n\n /**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var baseSetToString = !defineProperty$1\n ? identity\n : function (func, string) {\n return defineProperty$1(func, 'toString', {\n configurable: true,\n enumerable: false,\n value: constant(string),\n writable: true,\n })\n }\n\n const baseSetToString$1 = baseSetToString\n\n /**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var setToString = shortOut(baseSetToString$1)\n\n const setToString$1 = setToString\n\n /**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break\n }\n }\n return array\n }\n\n /**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1)\n\n while (fromRight ? index-- : ++index < length) {\n if (predicate(array[index], index, array)) {\n return index\n }\n }\n return -1\n }\n\n /**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\n function baseIsNaN(value) {\n return value !== value\n }\n\n /**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length\n\n while (++index < length) {\n if (array[index] === value) {\n return index\n }\n }\n return -1\n }\n\n /**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOf(array, value, fromIndex) {\n return value === value ? strictIndexOf(array, value, fromIndex) : baseFindIndex(array, baseIsNaN, fromIndex)\n }\n\n /**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length\n return !!length && baseIndexOf(array, value, 0) > -1\n }\n\n /** Used as references for various `Number` constants. */\n var MAX_SAFE_INTEGER$1 = 9007199254740991\n\n /** Used to detect unsigned integer values. */\n var reIsUint = /^(?:0|[1-9]\\d*)$/\n\n /**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n function isIndex(value, length) {\n var type = typeof value\n length = length == null ? MAX_SAFE_INTEGER$1 : length\n\n return (\n !!length &&\n (type == 'number' || (type != 'symbol' && reIsUint.test(value))) &&\n value > -1 &&\n value % 1 == 0 &&\n value < length\n )\n }\n\n /**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty$1) {\n defineProperty$1(object, key, {\n configurable: true,\n enumerable: true,\n value: value,\n writable: true,\n })\n } else {\n object[key] = value\n }\n }\n\n /**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n function eq(value, other) {\n return value === other || (value !== value && other !== other)\n }\n\n /** Used for built-in method references. */\n var objectProto$g = Object.prototype\n\n /** Used to check objects for own properties. */\n var hasOwnProperty$e = objectProto$g.hasOwnProperty\n\n /**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignValue(object, key, value) {\n var objValue = object[key]\n if (!(hasOwnProperty$e.call(object, key) && eq(objValue, value)) || (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value)\n }\n }\n\n /**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\n function copyObject(source, props, object, customizer) {\n var isNew = !object\n object || (object = {})\n\n var index = -1,\n length = props.length\n\n while (++index < length) {\n var key = props[index]\n\n var newValue = customizer ? customizer(object[key], source[key], key, object, source) : undefined\n\n if (newValue === undefined) {\n newValue = source[key]\n }\n if (isNew) {\n baseAssignValue(object, key, newValue)\n } else {\n assignValue(object, key, newValue)\n }\n }\n return object\n }\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeMax$3 = Math.max\n\n /**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\n function overRest(func, start, transform) {\n start = nativeMax$3(start === undefined ? func.length - 1 : start, 0)\n return function () {\n var args = arguments,\n index = -1,\n length = nativeMax$3(args.length - start, 0),\n array = Array(length)\n\n while (++index < length) {\n array[index] = args[start + index]\n }\n index = -1\n var otherArgs = Array(start + 1)\n while (++index < start) {\n otherArgs[index] = args[index]\n }\n otherArgs[start] = transform(array)\n return apply(func, this, otherArgs)\n }\n }\n\n /**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\n function baseRest(func, start) {\n return setToString$1(overRest(func, start, identity), func + '')\n }\n\n /** Used as references for various `Number` constants. */\n var MAX_SAFE_INTEGER = 9007199254740991\n\n /**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n function isLength(value) {\n return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER\n }\n\n /**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n function isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value)\n }\n\n /**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\n function isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false\n }\n var type = typeof index\n if (type == 'number' ? isArrayLike(object) && isIndex(index, object.length) : type == 'string' && index in object) {\n return eq(object[index], value)\n }\n return false\n }\n\n /**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\n function createAssigner(assigner) {\n return baseRest(function (object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined\n\n customizer = assigner.length > 3 && typeof customizer == 'function' ? (length--, customizer) : undefined\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer\n length = 1\n }\n object = Object(object)\n while (++index < length) {\n var source = sources[index]\n if (source) {\n assigner(object, source, index, customizer)\n }\n }\n return object\n })\n }\n\n /** Used for built-in method references. */\n var objectProto$f = Object.prototype\n\n /**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n function isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto$f\n\n return value === proto\n }\n\n /**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\n function baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n)\n\n while (++index < n) {\n result[index] = iteratee(index)\n }\n return result\n }\n\n /** `Object#toString` result references. */\n var argsTag$3 = '[object Arguments]'\n\n /**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\n function baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag$3\n }\n\n /** Used for built-in method references. */\n var objectProto$e = Object.prototype\n\n /** Used to check objects for own properties. */\n var hasOwnProperty$d = objectProto$e.hasOwnProperty\n\n /** Built-in value references. */\n var propertyIsEnumerable$1 = objectProto$e.propertyIsEnumerable\n\n /**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n var isArguments = baseIsArguments(\n (function () {\n return arguments\n })(),\n )\n ? baseIsArguments\n : function (value) {\n return (\n isObjectLike(value) && hasOwnProperty$d.call(value, 'callee') && !propertyIsEnumerable$1.call(value, 'callee')\n )\n }\n\n const isArguments$1 = isArguments\n\n /**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\n function stubFalse() {\n return false\n }\n\n /** Detect free variable `exports`. */\n var freeExports$2 = typeof exports == 'object' && exports && !exports.nodeType && exports\n\n /** Detect free variable `module`. */\n var freeModule$2 = freeExports$2 && typeof module == 'object' && module && !module.nodeType && module\n\n /** Detect the popular CommonJS extension `module.exports`. */\n var moduleExports$2 = freeModule$2 && freeModule$2.exports === freeExports$2\n\n /** Built-in value references. */\n var Buffer$1 = moduleExports$2 ? root$1.Buffer : undefined\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeIsBuffer = Buffer$1 ? Buffer$1.isBuffer : undefined\n\n /**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\n var isBuffer = nativeIsBuffer || stubFalse\n\n const isBuffer$1 = isBuffer\n\n /** `Object#toString` result references. */\n var argsTag$2 = '[object Arguments]',\n arrayTag$2 = '[object Array]',\n boolTag$3 = '[object Boolean]',\n dateTag$3 = '[object Date]',\n errorTag$2 = '[object Error]',\n funcTag$1 = '[object Function]',\n mapTag$6 = '[object Map]',\n numberTag$3 = '[object Number]',\n objectTag$3 = '[object Object]',\n regexpTag$4 = '[object RegExp]',\n setTag$6 = '[object Set]',\n stringTag$4 = '[object String]',\n weakMapTag$2 = '[object WeakMap]'\n\n var arrayBufferTag$3 = '[object ArrayBuffer]',\n dataViewTag$4 = '[object DataView]',\n float32Tag$2 = '[object Float32Array]',\n float64Tag$2 = '[object Float64Array]',\n int8Tag$2 = '[object Int8Array]',\n int16Tag$2 = '[object Int16Array]',\n int32Tag$2 = '[object Int32Array]',\n uint8Tag$2 = '[object Uint8Array]',\n uint8ClampedTag$2 = '[object Uint8ClampedArray]',\n uint16Tag$2 = '[object Uint16Array]',\n uint32Tag$2 = '[object Uint32Array]'\n\n /** Used to identify `toStringTag` values of typed arrays. */\n var typedArrayTags = {}\n typedArrayTags[float32Tag$2] = typedArrayTags[float64Tag$2] = typedArrayTags[int8Tag$2] = typedArrayTags[\n int16Tag$2\n ] = typedArrayTags[int32Tag$2] = typedArrayTags[uint8Tag$2] = typedArrayTags[uint8ClampedTag$2] = typedArrayTags[\n uint16Tag$2\n ] = typedArrayTags[uint32Tag$2] = true\n typedArrayTags[argsTag$2] = typedArrayTags[arrayTag$2] = typedArrayTags[arrayBufferTag$3] = typedArrayTags[\n boolTag$3\n ] = typedArrayTags[dataViewTag$4] = typedArrayTags[dateTag$3] = typedArrayTags[errorTag$2] = typedArrayTags[\n funcTag$1\n ] = typedArrayTags[mapTag$6] = typedArrayTags[numberTag$3] = typedArrayTags[objectTag$3] = typedArrayTags[\n regexpTag$4\n ] = typedArrayTags[setTag$6] = typedArrayTags[stringTag$4] = typedArrayTags[weakMapTag$2] = false\n\n /**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\n function baseIsTypedArray(value) {\n return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)]\n }\n\n /**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\n function baseUnary(func) {\n return function (value) {\n return func(value)\n }\n }\n\n /** Detect free variable `exports`. */\n var freeExports$1 = typeof exports == 'object' && exports && !exports.nodeType && exports\n\n /** Detect free variable `module`. */\n var freeModule$1 = freeExports$1 && typeof module == 'object' && module && !module.nodeType && module\n\n /** Detect the popular CommonJS extension `module.exports`. */\n var moduleExports$1 = freeModule$1 && freeModule$1.exports === freeExports$1\n\n /** Detect free variable `process` from Node.js. */\n var freeProcess = moduleExports$1 && freeGlobal$1.process\n\n /** Used to access faster Node.js helpers. */\n var nodeUtil = (function () {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule$1 && freeModule$1.require && freeModule$1.require('util').types\n\n if (types) {\n return types\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util')\n } catch (e) {}\n })()\n\n const nodeUtil$1 = nodeUtil\n\n /* Node.js helper references. */\n var nodeIsTypedArray = nodeUtil$1 && nodeUtil$1.isTypedArray\n\n /**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\n var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray\n\n const isTypedArray$1 = isTypedArray\n\n /** Used for built-in method references. */\n var objectProto$d = Object.prototype\n\n /** Used to check objects for own properties. */\n var hasOwnProperty$c = objectProto$d.hasOwnProperty\n\n /**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n function arrayLikeKeys(value, inherited) {\n var isArr = isArray$1(value),\n isArg = !isArr && isArguments$1(value),\n isBuff = !isArr && !isArg && isBuffer$1(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray$1(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length\n\n for (var key in value) {\n if (\n (inherited || hasOwnProperty$c.call(value, key)) &&\n !(\n skipIndexes &&\n // Safari 9 has enumerable `arguments.length` in strict mode.\n (key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length))\n )\n ) {\n result.push(key)\n }\n }\n return result\n }\n\n /**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n function overArg(func, transform) {\n return function (arg) {\n return func(transform(arg))\n }\n }\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeKeys = overArg(Object.keys, Object)\n\n const nativeKeys$1 = nativeKeys\n\n /** Used for built-in method references. */\n var objectProto$c = Object.prototype\n\n /** Used to check objects for own properties. */\n var hasOwnProperty$b = objectProto$c.hasOwnProperty\n\n /**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys$1(object)\n }\n var result = []\n for (var key in Object(object)) {\n if (hasOwnProperty$b.call(object, key) && key != 'constructor') {\n result.push(key)\n }\n }\n return result\n }\n\n /**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n function keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object)\n }\n\n /** Used for built-in method references. */\n var objectProto$b = Object.prototype\n\n /** Used to check objects for own properties. */\n var hasOwnProperty$a = objectProto$b.hasOwnProperty\n\n /**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\n var assign = createAssigner(function (object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object)\n return\n }\n for (var key in source) {\n if (hasOwnProperty$a.call(source, key)) {\n assignValue(object, key, source[key])\n }\n }\n })\n\n const assign$1 = assign\n\n /**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function nativeKeysIn(object) {\n var result = []\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key)\n }\n }\n return result\n }\n\n /** Used for built-in method references. */\n var objectProto$a = Object.prototype\n\n /** Used to check objects for own properties. */\n var hasOwnProperty$9 = objectProto$a.hasOwnProperty\n\n /**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object)\n }\n var isProto = isPrototype(object),\n result = []\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty$9.call(object, key)))) {\n result.push(key)\n }\n }\n return result\n }\n\n /**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\n function keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object)\n }\n\n /** Used to match property names within property paths. */\n var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/\n\n /**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\n function isKey(value, object) {\n if (isArray$1(value)) {\n return false\n }\n var type = typeof value\n if (type == 'number' || type == 'symbol' || type == 'boolean' || value == null || isSymbol(value)) {\n return true\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || (object != null && value in Object(object))\n }\n\n /* Built-in method references that are verified to be native. */\n var nativeCreate = getNative(Object, 'create')\n\n const nativeCreate$1 = nativeCreate\n\n /**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n function hashClear() {\n this.__data__ = nativeCreate$1 ? nativeCreate$1(null) : {}\n this.size = 0\n }\n\n /**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key]\n this.size -= result ? 1 : 0\n return result\n }\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED$2 = '__lodash_hash_undefined__'\n\n /** Used for built-in method references. */\n var objectProto$9 = Object.prototype\n\n /** Used to check objects for own properties. */\n var hasOwnProperty$8 = objectProto$9.hasOwnProperty\n\n /**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function hashGet(key) {\n var data = this.__data__\n if (nativeCreate$1) {\n var result = data[key]\n return result === HASH_UNDEFINED$2 ? undefined : result\n }\n return hasOwnProperty$8.call(data, key) ? data[key] : undefined\n }\n\n /** Used for built-in method references. */\n var objectProto$8 = Object.prototype\n\n /** Used to check objects for own properties. */\n var hasOwnProperty$7 = objectProto$8.hasOwnProperty\n\n /**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function hashHas(key) {\n var data = this.__data__\n return nativeCreate$1 ? data[key] !== undefined : hasOwnProperty$7.call(data, key)\n }\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED$1 = '__lodash_hash_undefined__'\n\n /**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n function hashSet(key, value) {\n var data = this.__data__\n this.size += this.has(key) ? 0 : 1\n data[key] = nativeCreate$1 && value === undefined ? HASH_UNDEFINED$1 : value\n return this\n }\n\n /**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length\n\n this.clear()\n while (++index < length) {\n var entry = entries[index]\n this.set(entry[0], entry[1])\n }\n }\n\n // Add methods to `Hash`.\n Hash.prototype.clear = hashClear\n Hash.prototype['delete'] = hashDelete\n Hash.prototype.get = hashGet\n Hash.prototype.has = hashHas\n Hash.prototype.set = hashSet\n\n /**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n function listCacheClear() {\n this.__data__ = []\n this.size = 0\n }\n\n /**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function assocIndexOf(array, key) {\n var length = array.length\n while (length--) {\n if (eq(array[length][0], key)) {\n return length\n }\n }\n return -1\n }\n\n /** Used for built-in method references. */\n var arrayProto = Array.prototype\n\n /** Built-in value references. */\n var splice = arrayProto.splice\n\n /**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key)\n\n if (index < 0) {\n return false\n }\n var lastIndex = data.length - 1\n if (index == lastIndex) {\n data.pop()\n } else {\n splice.call(data, index, 1)\n }\n --this.size\n return true\n }\n\n /**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key)\n\n return index < 0 ? undefined : data[index][1]\n }\n\n /**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1\n }\n\n /**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n function listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key)\n\n if (index < 0) {\n ++this.size\n data.push([key, value])\n } else {\n data[index][1] = value\n }\n return this\n }\n\n /**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length\n\n this.clear()\n while (++index < length) {\n var entry = entries[index]\n this.set(entry[0], entry[1])\n }\n }\n\n // Add methods to `ListCache`.\n ListCache.prototype.clear = listCacheClear\n ListCache.prototype['delete'] = listCacheDelete\n ListCache.prototype.get = listCacheGet\n ListCache.prototype.has = listCacheHas\n ListCache.prototype.set = listCacheSet\n\n /* Built-in method references that are verified to be native. */\n var Map$1 = getNative(root$1, 'Map')\n\n const Map$2 = Map$1\n\n /**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n function mapCacheClear() {\n this.size = 0\n this.__data__ = {\n hash: new Hash(),\n map: new (Map$2 || ListCache)(),\n string: new Hash(),\n }\n }\n\n /**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n function isKeyable(value) {\n var type = typeof value\n return type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean'\n ? value !== '__proto__'\n : value === null\n }\n\n /**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n function getMapData(map, key) {\n var data = map.__data__\n return isKeyable(key) ? data[typeof key == 'string' ? 'string' : 'hash'] : data.map\n }\n\n /**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key)\n this.size -= result ? 1 : 0\n return result\n }\n\n /**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function mapCacheGet(key) {\n return getMapData(this, key).get(key)\n }\n\n /**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function mapCacheHas(key) {\n return getMapData(this, key).has(key)\n }\n\n /**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n function mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size\n\n data.set(key, value)\n this.size += data.size == size ? 0 : 1\n return this\n }\n\n /**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length\n\n this.clear()\n while (++index < length) {\n var entry = entries[index]\n this.set(entry[0], entry[1])\n }\n }\n\n // Add methods to `MapCache`.\n MapCache.prototype.clear = mapCacheClear\n MapCache.prototype['delete'] = mapCacheDelete\n MapCache.prototype.get = mapCacheGet\n MapCache.prototype.has = mapCacheHas\n MapCache.prototype.set = mapCacheSet\n\n /** Error message constants. */\n var FUNC_ERROR_TEXT$1 = 'Expected a function'\n\n /**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\n function memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT$1)\n }\n var memoized = function () {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache\n\n if (cache.has(key)) {\n return cache.get(key)\n }\n var result = func.apply(this, args)\n memoized.cache = cache.set(key, result) || cache\n return result\n }\n memoized.cache = new (memoize.Cache || MapCache)()\n return memoized\n }\n\n // Expose `MapCache`.\n memoize.Cache = MapCache\n\n /** Used as the maximum memoize cache size. */\n var MAX_MEMOIZE_SIZE = 500\n\n /**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\n function memoizeCapped(func) {\n var result = memoize(func, function (key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear()\n }\n return key\n })\n\n var cache = result.cache\n return result\n }\n\n /** Used to match property names within property paths. */\n var rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g\n\n /** Used to match backslashes in property paths. */\n var reEscapeChar = /\\\\(\\\\)?/g\n\n /**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\n var stringToPath = memoizeCapped(function (string) {\n var result = []\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('')\n }\n string.replace(rePropName, function (match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : number || match)\n })\n return result\n })\n\n const stringToPath$1 = stringToPath\n\n /**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\n function toString(value) {\n return value == null ? '' : baseToString(value)\n }\n\n /**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\n function castPath(value, object) {\n if (isArray$1(value)) {\n return value\n }\n return isKey(value, object) ? [value] : stringToPath$1(toString(value))\n }\n\n /** Used as references for various `Number` constants. */\n var INFINITY$1 = 1 / 0\n\n /**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\n function toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value\n }\n var result = value + ''\n return result == '0' && 1 / value == -INFINITY$1 ? '-0' : result\n }\n\n /**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\n function baseGet(object, path) {\n path = castPath(path, object)\n\n var index = 0,\n length = path.length\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])]\n }\n return index && index == length ? object : undefined\n }\n\n /**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\n function get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path)\n return result === undefined ? defaultValue : result\n }\n\n /**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\n function arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length\n\n while (++index < length) {\n array[offset + index] = values[index]\n }\n return array\n }\n\n /** Built-in value references. */\n var spreadableSymbol = Symbol$2 ? Symbol$2.isConcatSpreadable : undefined\n\n /**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\n function isFlattenable(value) {\n return isArray$1(value) || isArguments$1(value) || !!(spreadableSymbol && value && value[spreadableSymbol])\n }\n\n /**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\n function baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length\n\n predicate || (predicate = isFlattenable)\n result || (result = [])\n\n while (++index < length) {\n var value = array[index]\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result)\n } else {\n arrayPush(result, value)\n }\n } else if (!isStrict) {\n result[result.length] = value\n }\n }\n return result\n }\n\n /**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\n function flatten(array) {\n var length = array == null ? 0 : array.length\n return length ? baseFlatten(array, 1) : []\n }\n\n /** Built-in value references. */\n var getPrototype = overArg(Object.getPrototypeOf, Object)\n\n const getPrototype$1 = getPrototype\n\n /**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseSlice(array, start, end) {\n var index = -1,\n length = array.length\n\n if (start < 0) {\n start = -start > length ? 0 : length + start\n }\n end = end > length ? length : end\n if (end < 0) {\n end += length\n }\n length = start > end ? 0 : (end - start) >>> 0\n start >>>= 0\n\n var result = Array(length)\n while (++index < length) {\n result[index] = array[index + start]\n }\n return result\n }\n\n /**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length\n\n if (initAccum && length) {\n accumulator = array[++index]\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array)\n }\n return accumulator\n }\n\n /**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n function stackClear() {\n this.__data__ = new ListCache()\n this.size = 0\n }\n\n /**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key)\n\n this.size = data.size\n return result\n }\n\n /**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function stackGet(key) {\n return this.__data__.get(key)\n }\n\n /**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function stackHas(key) {\n return this.__data__.has(key)\n }\n\n /** Used as the size to enable large array optimizations. */\n var LARGE_ARRAY_SIZE$2 = 200\n\n /**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n function stackSet(key, value) {\n var data = this.__data__\n if (data instanceof ListCache) {\n var pairs = data.__data__\n if (!Map$2 || pairs.length < LARGE_ARRAY_SIZE$2 - 1) {\n pairs.push([key, value])\n this.size = ++data.size\n return this\n }\n data = this.__data__ = new MapCache(pairs)\n }\n data.set(key, value)\n this.size = data.size\n return this\n }\n\n /**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Stack(entries) {\n var data = (this.__data__ = new ListCache(entries))\n this.size = data.size\n }\n\n // Add methods to `Stack`.\n Stack.prototype.clear = stackClear\n Stack.prototype['delete'] = stackDelete\n Stack.prototype.get = stackGet\n Stack.prototype.has = stackHas\n Stack.prototype.set = stackSet\n\n /**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssign(object, source) {\n return object && copyObject(source, keys(source), object)\n }\n\n /**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object)\n }\n\n /** Detect free variable `exports`. */\n var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports\n\n /** Detect free variable `module`. */\n var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module\n\n /** Detect the popular CommonJS extension `module.exports`. */\n var moduleExports = freeModule && freeModule.exports === freeExports\n\n /** Built-in value references. */\n var Buffer = moduleExports ? root$1.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined\n\n /**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\n function cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice()\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length)\n\n buffer.copy(result)\n return result\n }\n\n /**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = []\n\n while (++index < length) {\n var value = array[index]\n if (predicate(value, index, array)) {\n result[resIndex++] = value\n }\n }\n return result\n }\n\n /**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\n function stubArray() {\n return []\n }\n\n /** Used for built-in method references. */\n var objectProto$7 = Object.prototype\n\n /** Built-in value references. */\n var propertyIsEnumerable = objectProto$7.propertyIsEnumerable\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeGetSymbols$1 = Object.getOwnPropertySymbols\n\n /**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbols = !nativeGetSymbols$1\n ? stubArray\n : function (object) {\n if (object == null) {\n return []\n }\n object = Object(object)\n return arrayFilter(nativeGetSymbols$1(object), function (symbol) {\n return propertyIsEnumerable.call(object, symbol)\n })\n }\n\n const getSymbols$1 = getSymbols\n\n /**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbols(source, object) {\n return copyObject(source, getSymbols$1(source), object)\n }\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeGetSymbols = Object.getOwnPropertySymbols\n\n /**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbolsIn = !nativeGetSymbols\n ? stubArray\n : function (object) {\n var result = []\n while (object) {\n arrayPush(result, getSymbols$1(object))\n object = getPrototype$1(object)\n }\n return result\n }\n\n const getSymbolsIn$1 = getSymbolsIn\n\n /**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn$1(source), object)\n }\n\n /**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object)\n return isArray$1(object) ? result : arrayPush(result, symbolsFunc(object))\n }\n\n /**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols$1)\n }\n\n /**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn$1)\n }\n\n /* Built-in method references that are verified to be native. */\n var DataView = getNative(root$1, 'DataView')\n\n const DataView$1 = DataView\n\n /* Built-in method references that are verified to be native. */\n var Promise$1 = getNative(root$1, 'Promise')\n\n const Promise$2 = Promise$1\n\n /* Built-in method references that are verified to be native. */\n var Set = getNative(root$1, 'Set')\n\n const Set$1 = Set\n\n /** `Object#toString` result references. */\n var mapTag$5 = '[object Map]',\n objectTag$2 = '[object Object]',\n promiseTag = '[object Promise]',\n setTag$5 = '[object Set]',\n weakMapTag$1 = '[object WeakMap]'\n\n var dataViewTag$3 = '[object DataView]'\n\n /** Used to detect maps, sets, and weakmaps. */\n var dataViewCtorString = toSource(DataView$1),\n mapCtorString = toSource(Map$2),\n promiseCtorString = toSource(Promise$2),\n setCtorString = toSource(Set$1),\n weakMapCtorString = toSource(WeakMap$1)\n\n /**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n var getTag = baseGetTag\n\n // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n if (\n (DataView$1 && getTag(new DataView$1(new ArrayBuffer(1))) != dataViewTag$3) ||\n (Map$2 && getTag(new Map$2()) != mapTag$5) ||\n (Promise$2 && getTag(Promise$2.resolve()) != promiseTag) ||\n (Set$1 && getTag(new Set$1()) != setTag$5) ||\n (WeakMap$1 && getTag(new WeakMap$1()) != weakMapTag$1)\n ) {\n getTag = function (value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag$2 ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : ''\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString:\n return dataViewTag$3\n case mapCtorString:\n return mapTag$5\n case promiseCtorString:\n return promiseTag\n case setCtorString:\n return setTag$5\n case weakMapCtorString:\n return weakMapTag$1\n }\n }\n return result\n }\n }\n\n const getTag$1 = getTag\n\n /** Used for built-in method references. */\n var objectProto$6 = Object.prototype\n\n /** Used to check objects for own properties. */\n var hasOwnProperty$6 = objectProto$6.hasOwnProperty\n\n /**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\n function initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length)\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty$6.call(array, 'index')) {\n result.index = array.index\n result.input = array.input\n }\n return result\n }\n\n /** Built-in value references. */\n var Uint8Array = root$1.Uint8Array\n\n const Uint8Array$1 = Uint8Array\n\n /**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\n function cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength)\n new Uint8Array$1(result).set(new Uint8Array$1(arrayBuffer))\n return result\n }\n\n /**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\n function cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength)\n }\n\n /** Used to match `RegExp` flags from their coerced string values. */\n var reFlags = /\\w*$/\n\n /**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\n function cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp))\n result.lastIndex = regexp.lastIndex\n return result\n }\n\n /** Used to convert symbols to primitives and strings. */\n var symbolProto$1 = Symbol$2 ? Symbol$2.prototype : undefined,\n symbolValueOf$1 = symbolProto$1 ? symbolProto$1.valueOf : undefined\n\n /**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\n function cloneSymbol(symbol) {\n return symbolValueOf$1 ? Object(symbolValueOf$1.call(symbol)) : {}\n }\n\n /**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\n function cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length)\n }\n\n /** `Object#toString` result references. */\n var boolTag$2 = '[object Boolean]',\n dateTag$2 = '[object Date]',\n mapTag$4 = '[object Map]',\n numberTag$2 = '[object Number]',\n regexpTag$3 = '[object RegExp]',\n setTag$4 = '[object Set]',\n stringTag$3 = '[object String]',\n symbolTag$2 = '[object Symbol]'\n\n var arrayBufferTag$2 = '[object ArrayBuffer]',\n dataViewTag$2 = '[object DataView]',\n float32Tag$1 = '[object Float32Array]',\n float64Tag$1 = '[object Float64Array]',\n int8Tag$1 = '[object Int8Array]',\n int16Tag$1 = '[object Int16Array]',\n int32Tag$1 = '[object Int32Array]',\n uint8Tag$1 = '[object Uint8Array]',\n uint8ClampedTag$1 = '[object Uint8ClampedArray]',\n uint16Tag$1 = '[object Uint16Array]',\n uint32Tag$1 = '[object Uint32Array]'\n\n /**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor\n switch (tag) {\n case arrayBufferTag$2:\n return cloneArrayBuffer(object)\n\n case boolTag$2:\n case dateTag$2:\n return new Ctor(+object)\n\n case dataViewTag$2:\n return cloneDataView(object, isDeep)\n\n case float32Tag$1:\n case float64Tag$1:\n case int8Tag$1:\n case int16Tag$1:\n case int32Tag$1:\n case uint8Tag$1:\n case uint8ClampedTag$1:\n case uint16Tag$1:\n case uint32Tag$1:\n return cloneTypedArray(object, isDeep)\n\n case mapTag$4:\n return new Ctor()\n\n case numberTag$2:\n case stringTag$3:\n return new Ctor(object)\n\n case regexpTag$3:\n return cloneRegExp(object)\n\n case setTag$4:\n return new Ctor()\n\n case symbolTag$2:\n return cloneSymbol(object)\n }\n }\n\n /**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneObject(object) {\n return typeof object.constructor == 'function' && !isPrototype(object) ? baseCreate$1(getPrototype$1(object)) : {}\n }\n\n /** `Object#toString` result references. */\n var mapTag$3 = '[object Map]'\n\n /**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\n function baseIsMap(value) {\n return isObjectLike(value) && getTag$1(value) == mapTag$3\n }\n\n /* Node.js helper references. */\n var nodeIsMap = nodeUtil$1 && nodeUtil$1.isMap\n\n /**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\n var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap\n\n const isMap$1 = isMap\n\n /** `Object#toString` result references. */\n var setTag$3 = '[object Set]'\n\n /**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\n function baseIsSet(value) {\n return isObjectLike(value) && getTag$1(value) == setTag$3\n }\n\n /* Node.js helper references. */\n var nodeIsSet = nodeUtil$1 && nodeUtil$1.isSet\n\n /**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\n var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet\n\n const isSet$1 = isSet\n\n /** Used to compose bitmasks for cloning. */\n var CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG$1 = 4\n\n /** `Object#toString` result references. */\n var argsTag$1 = '[object Arguments]',\n arrayTag$1 = '[object Array]',\n boolTag$1 = '[object Boolean]',\n dateTag$1 = '[object Date]',\n errorTag$1 = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag$2 = '[object Map]',\n numberTag$1 = '[object Number]',\n objectTag$1 = '[object Object]',\n regexpTag$2 = '[object RegExp]',\n setTag$2 = '[object Set]',\n stringTag$2 = '[object String]',\n symbolTag$1 = '[object Symbol]',\n weakMapTag = '[object WeakMap]'\n\n var arrayBufferTag$1 = '[object ArrayBuffer]',\n dataViewTag$1 = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]'\n\n /** Used to identify `toStringTag` values supported by `_.clone`. */\n var cloneableTags = {}\n cloneableTags[argsTag$1] = cloneableTags[arrayTag$1] = cloneableTags[arrayBufferTag$1] = cloneableTags[\n dataViewTag$1\n ] = cloneableTags[boolTag$1] = cloneableTags[dateTag$1] = cloneableTags[float32Tag] = cloneableTags[\n float64Tag\n ] = cloneableTags[int8Tag] = cloneableTags[int16Tag] = cloneableTags[int32Tag] = cloneableTags[\n mapTag$2\n ] = cloneableTags[numberTag$1] = cloneableTags[objectTag$1] = cloneableTags[regexpTag$2] = cloneableTags[\n setTag$2\n ] = cloneableTags[stringTag$2] = cloneableTags[symbolTag$1] = cloneableTags[uint8Tag] = cloneableTags[\n uint8ClampedTag\n ] = cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true\n cloneableTags[errorTag$1] = cloneableTags[funcTag] = cloneableTags[weakMapTag] = false\n\n /**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\n function baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG$1\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value)\n }\n if (result !== undefined) {\n return result\n }\n if (!isObject(value)) {\n return value\n }\n var isArr = isArray$1(value)\n if (isArr) {\n result = initCloneArray(value)\n if (!isDeep) {\n return copyArray(value, result)\n }\n } else {\n var tag = getTag$1(value),\n isFunc = tag == funcTag || tag == genTag\n\n if (isBuffer$1(value)) {\n return cloneBuffer(value, isDeep)\n }\n if (tag == objectTag$1 || tag == argsTag$1 || (isFunc && !object)) {\n result = isFlat || isFunc ? {} : initCloneObject(value)\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value))\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {}\n }\n result = initCloneByTag(value, tag, isDeep)\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack())\n var stacked = stack.get(value)\n if (stacked) {\n return stacked\n }\n stack.set(value, result)\n\n if (isSet$1(value)) {\n value.forEach(function (subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack))\n })\n } else if (isMap$1(value)) {\n value.forEach(function (subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack))\n })\n }\n\n var keysFunc = isFull ? (isFlat ? getAllKeysIn : getAllKeys) : isFlat ? keysIn : keys\n\n var props = isArr ? undefined : keysFunc(value)\n arrayEach(props || value, function (subValue, key) {\n if (props) {\n key = subValue\n subValue = value[key]\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack))\n })\n return result\n }\n\n /** Used to compose bitmasks for cloning. */\n var CLONE_SYMBOLS_FLAG = 4\n\n /**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\n function clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG)\n }\n\n /**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\n function compact(array) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = []\n\n while (++index < length) {\n var value = array[index]\n if (value) {\n result[resIndex++] = value\n }\n }\n return result\n }\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED = '__lodash_hash_undefined__'\n\n /**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\n function setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED)\n return this\n }\n\n /**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\n function setCacheHas(value) {\n return this.__data__.has(value)\n }\n\n /**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\n function SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length\n\n this.__data__ = new MapCache()\n while (++index < length) {\n this.add(values[index])\n }\n }\n\n // Add methods to `SetCache`.\n SetCache.prototype.add = SetCache.prototype.push = setCacheAdd\n SetCache.prototype.has = setCacheHas\n\n /**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true\n }\n }\n return false\n }\n\n /**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function cacheHas(cache, key) {\n return cache.has(key)\n }\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG$5 = 1,\n COMPARE_UNORDERED_FLAG$3 = 2\n\n /**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\n function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG$5,\n arrLength = array.length,\n othLength = other.length\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array)\n var othStacked = stack.get(other)\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array\n }\n var index = -1,\n result = true,\n seen = bitmask & COMPARE_UNORDERED_FLAG$3 ? new SetCache() : undefined\n\n stack.set(array, other)\n stack.set(other, array)\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index]\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack)\n }\n if (compared !== undefined) {\n if (compared) {\n continue\n }\n result = false\n break\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (\n !arraySome(other, function (othValue, othIndex) {\n if (\n !cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))\n ) {\n return seen.push(othIndex)\n }\n })\n ) {\n result = false\n break\n }\n } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n result = false\n break\n }\n }\n stack['delete'](array)\n stack['delete'](other)\n return result\n }\n\n /**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\n function mapToArray(map) {\n var index = -1,\n result = Array(map.size)\n\n map.forEach(function (value, key) {\n result[++index] = [key, value]\n })\n return result\n }\n\n /**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\n function setToArray(set) {\n var index = -1,\n result = Array(set.size)\n\n set.forEach(function (value) {\n result[++index] = value\n })\n return result\n }\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG$4 = 1,\n COMPARE_UNORDERED_FLAG$2 = 2\n\n /** `Object#toString` result references. */\n var boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag$1 = '[object Map]',\n numberTag = '[object Number]',\n regexpTag$1 = '[object RegExp]',\n setTag$1 = '[object Set]',\n stringTag$1 = '[object String]',\n symbolTag = '[object Symbol]'\n\n var arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]'\n\n /** Used to convert symbols to primitives and strings. */\n var symbolProto = Symbol$2 ? Symbol$2.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined\n\n /**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) {\n return false\n }\n object = object.buffer\n other = other.buffer\n\n case arrayBufferTag:\n if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array$1(object), new Uint8Array$1(other))) {\n return false\n }\n return true\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other)\n\n case errorTag:\n return object.name == other.name && object.message == other.message\n\n case regexpTag$1:\n case stringTag$1:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == other + ''\n\n case mapTag$1:\n var convert = mapToArray\n\n case setTag$1:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG$4\n convert || (convert = setToArray)\n\n if (object.size != other.size && !isPartial) {\n return false\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object)\n if (stacked) {\n return stacked == other\n }\n bitmask |= COMPARE_UNORDERED_FLAG$2\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other)\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack)\n stack['delete'](object)\n return result\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other)\n }\n }\n return false\n }\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG$3 = 1\n\n /** Used for built-in method references. */\n var objectProto$5 = Object.prototype\n\n /** Used to check objects for own properties. */\n var hasOwnProperty$5 = objectProto$5.hasOwnProperty\n\n /**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG$3,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length\n\n if (objLength != othLength && !isPartial) {\n return false\n }\n var index = objLength\n while (index--) {\n var key = objProps[index]\n if (!(isPartial ? key in other : hasOwnProperty$5.call(other, key))) {\n return false\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object)\n var othStacked = stack.get(other)\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object\n }\n var result = true\n stack.set(object, other)\n stack.set(other, object)\n\n var skipCtor = isPartial\n while (++index < objLength) {\n key = objProps[index]\n var objValue = object[key],\n othValue = other[key]\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack)\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (\n !(compared === undefined\n ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)\n : compared)\n ) {\n result = false\n break\n }\n skipCtor || (skipCtor = key == 'constructor')\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor\n\n // Non `Object` object instances with different constructors are not equal.\n if (\n objCtor != othCtor &&\n 'constructor' in object &&\n 'constructor' in other &&\n !(\n typeof objCtor == 'function' &&\n objCtor instanceof objCtor &&\n typeof othCtor == 'function' &&\n othCtor instanceof othCtor\n )\n ) {\n result = false\n }\n }\n stack['delete'](object)\n stack['delete'](other)\n return result\n }\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG$2 = 1\n\n /** `Object#toString` result references. */\n var argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]'\n\n /** Used for built-in method references. */\n var objectProto$4 = Object.prototype\n\n /** Used to check objects for own properties. */\n var hasOwnProperty$4 = objectProto$4.hasOwnProperty\n\n /**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray$1(object),\n othIsArr = isArray$1(other),\n objTag = objIsArr ? arrayTag : getTag$1(object),\n othTag = othIsArr ? arrayTag : getTag$1(other)\n\n objTag = objTag == argsTag ? objectTag : objTag\n othTag = othTag == argsTag ? objectTag : othTag\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag\n\n if (isSameTag && isBuffer$1(object)) {\n if (!isBuffer$1(other)) {\n return false\n }\n objIsArr = true\n objIsObj = false\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack())\n return objIsArr || isTypedArray$1(object)\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack)\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG$2)) {\n var objIsWrapped = objIsObj && hasOwnProperty$4.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty$4.call(other, '__wrapped__')\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other\n\n stack || (stack = new Stack())\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack)\n }\n }\n if (!isSameTag) {\n return false\n }\n stack || (stack = new Stack())\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack)\n }\n\n /**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\n function baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack)\n }\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG$1 = 1,\n COMPARE_UNORDERED_FLAG$1 = 2\n\n /**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\n function baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer\n\n if (object == null) {\n return !length\n }\n object = Object(object)\n while (index--) {\n var data = matchData[index]\n if (noCustomizer && data[2] ? data[1] !== object[data[0]] : !(data[0] in object)) {\n return false\n }\n }\n while (++index < length) {\n data = matchData[index]\n var key = data[0],\n objValue = object[key],\n srcValue = data[1]\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false\n }\n } else {\n var stack = new Stack()\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack)\n }\n if (\n !(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG$1 | COMPARE_UNORDERED_FLAG$1, customizer, stack)\n : result)\n ) {\n return false\n }\n }\n }\n return true\n }\n\n /**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\n function isStrictComparable(value) {\n return value === value && !isObject(value)\n }\n\n /**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\n function getMatchData(object) {\n var result = keys(object),\n length = result.length\n\n while (length--) {\n var key = result[length],\n value = object[key]\n\n result[length] = [key, value, isStrictComparable(value)]\n }\n return result\n }\n\n /**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function matchesStrictComparable(key, srcValue) {\n return function (object) {\n if (object == null) {\n return false\n }\n return object[key] === srcValue && (srcValue !== undefined || key in Object(object))\n }\n }\n\n /**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatches(source) {\n var matchData = getMatchData(source)\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1])\n }\n return function (object) {\n return object === source || baseIsMatch(object, source, matchData)\n }\n }\n\n /**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHasIn(object, key) {\n return object != null && key in Object(object)\n }\n\n /**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\n function hasPath(object, path, hasFunc) {\n path = castPath(path, object)\n\n var index = -1,\n length = path.length,\n result = false\n\n while (++index < length) {\n var key = toKey(path[index])\n if (!(result = object != null && hasFunc(object, key))) {\n break\n }\n object = object[key]\n }\n if (result || ++index != length) {\n return result\n }\n length = object == null ? 0 : object.length\n return !!length && isLength(length) && isIndex(key, length) && (isArray$1(object) || isArguments$1(object))\n }\n\n /**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\n function hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn)\n }\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2\n\n /**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue)\n }\n return function (object) {\n var objValue = get(object, path)\n return objValue === undefined && objValue === srcValue\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG)\n }\n }\n\n /**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function baseProperty(key) {\n return function (object) {\n return object == null ? undefined : object[key]\n }\n }\n\n /**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyDeep(path) {\n return function (object) {\n return baseGet(object, path)\n }\n }\n\n /**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\n function property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path)\n }\n\n /**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\n function baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value\n }\n if (value == null) {\n return identity\n }\n if (typeof value == 'object') {\n return isArray$1(value) ? baseMatchesProperty(value[0], value[1]) : baseMatches(value)\n }\n return property(value)\n }\n\n /**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length\n\n while (++index < length) {\n var value = array[index]\n setter(accumulator, value, iteratee(value), array)\n }\n return accumulator\n }\n\n /**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseFor(fromRight) {\n return function (object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length\n\n while (length--) {\n var key = props[fromRight ? length : ++index]\n if (iteratee(iterable[key], key, iterable) === false) {\n break\n }\n }\n return object\n }\n }\n\n /**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseFor = createBaseFor()\n\n const baseFor$1 = baseFor\n\n /**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwn(object, iteratee) {\n return object && baseFor$1(object, iteratee, keys)\n }\n\n /**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseEach(eachFunc, fromRight) {\n return function (collection, iteratee) {\n if (collection == null) {\n return collection\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee)\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection)\n\n while (fromRight ? index-- : ++index < length) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break\n }\n }\n return collection\n }\n }\n\n /**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEach = createBaseEach(baseForOwn)\n\n const baseEach$1 = baseEach\n\n /**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach$1(collection, function (value, key, collection) {\n setter(accumulator, value, iteratee(value), collection)\n })\n return accumulator\n }\n\n /**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\n function createAggregator(setter, initializer) {\n return function (collection, iteratee) {\n var func = isArray$1(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {}\n\n return func(collection, setter, baseIteratee(iteratee), accumulator)\n }\n }\n\n /** Used for built-in method references. */\n var objectProto$3 = Object.prototype\n\n /** Used to check objects for own properties. */\n var hasOwnProperty$3 = objectProto$3.hasOwnProperty\n\n /**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var defaults = baseRest(function (object, sources) {\n object = Object(object)\n\n var index = -1\n var length = sources.length\n var guard = length > 2 ? sources[2] : undefined\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1\n }\n\n while (++index < length) {\n var source = sources[index]\n var props = keysIn(source)\n var propsIndex = -1\n var propsLength = props.length\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex]\n var value = object[key]\n\n if (value === undefined || (eq(value, objectProto$3[key]) && !hasOwnProperty$3.call(object, key))) {\n object[key] = source[key]\n }\n }\n }\n\n return object\n })\n\n const defaults$1 = defaults\n\n /**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\n function isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value)\n }\n\n /**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true\n }\n }\n return false\n }\n\n /** Used as the size to enable large array optimizations. */\n var LARGE_ARRAY_SIZE$1 = 200\n\n /**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\n function baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length\n\n if (!length) {\n return result\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee))\n }\n if (comparator) {\n includes = arrayIncludesWith\n isCommon = false\n } else if (values.length >= LARGE_ARRAY_SIZE$1) {\n includes = cacheHas\n isCommon = false\n values = new SetCache(values)\n }\n outer: while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value)\n\n value = comparator || value !== 0 ? value : 0\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer\n }\n }\n result.push(value)\n } else if (!includes(values, computed, comparator)) {\n result.push(value)\n }\n }\n return result\n }\n\n /**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\n var difference = baseRest(function (array, values) {\n return isArrayLikeObject(array) ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) : []\n })\n\n const difference$1 = difference\n\n /**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\n function last(array) {\n var length = array == null ? 0 : array.length\n return length ? array[length - 1] : undefined\n }\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.drop([1, 2, 3]);\n * // => [2, 3]\n *\n * _.drop([1, 2, 3], 2);\n * // => [3]\n *\n * _.drop([1, 2, 3], 5);\n * // => []\n *\n * _.drop([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function drop(array, n, guard) {\n var length = array == null ? 0 : array.length\n if (!length) {\n return []\n }\n n = guard || n === undefined ? 1 : toInteger(n)\n return baseSlice(array, n < 0 ? 0 : n, length)\n }\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.dropRight([1, 2, 3]);\n * // => [1, 2]\n *\n * _.dropRight([1, 2, 3], 2);\n * // => [1]\n *\n * _.dropRight([1, 2, 3], 5);\n * // => []\n *\n * _.dropRight([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function dropRight(array, n, guard) {\n var length = array == null ? 0 : array.length\n if (!length) {\n return []\n }\n n = guard || n === undefined ? 1 : toInteger(n)\n n = length - n\n return baseSlice(array, 0, n < 0 ? 0 : n)\n }\n\n /**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\n function castFunction(value) {\n return typeof value == 'function' ? value : identity\n }\n\n /**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forEach(collection, iteratee) {\n var func = isArray$1(collection) ? arrayEach : baseEach$1\n return func(collection, castFunction(iteratee))\n }\n\n /**\n * A specialized version of `_.every` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n */\n function arrayEvery(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length\n\n while (++index < length) {\n if (!predicate(array[index], index, array)) {\n return false\n }\n }\n return true\n }\n\n /**\n * The base implementation of `_.every` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`\n */\n function baseEvery(collection, predicate) {\n var result = true\n baseEach$1(collection, function (value, index, collection) {\n result = !!predicate(value, index, collection)\n return result\n })\n return result\n }\n\n /**\n * Checks if `predicate` returns truthy for **all** elements of `collection`.\n * Iteration is stopped once `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `true` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\n function every(collection, predicate, guard) {\n var func = isArray$1(collection) ? arrayEvery : baseEvery\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined\n }\n return func(collection, baseIteratee(predicate))\n }\n\n /**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function baseFilter(collection, predicate) {\n var result = []\n baseEach$1(collection, function (value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value)\n }\n })\n return result\n }\n\n /**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n *\n * // Combining several predicates using `_.overEvery` or `_.overSome`.\n * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n * // => objects for ['fred', 'barney']\n */\n function filter(collection, predicate) {\n var func = isArray$1(collection) ? arrayFilter : baseFilter\n return func(collection, baseIteratee(predicate))\n }\n\n /**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\n function createFind(findIndexFunc) {\n return function (collection, predicate, fromIndex) {\n var iterable = Object(collection)\n if (!isArrayLike(collection)) {\n var iteratee = baseIteratee(predicate)\n collection = keys(collection)\n predicate = function (key) {\n return iteratee(iterable[key], key, iterable)\n }\n }\n var index = findIndexFunc(collection, predicate, fromIndex)\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined\n }\n }\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeMax$2 = Math.max\n\n /**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\n function findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length\n if (!length) {\n return -1\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex)\n if (index < 0) {\n index = nativeMax$2(length + index, 0)\n }\n return baseFindIndex(array, baseIteratee(predicate), index)\n }\n\n /**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\n var find = createFind(findIndex)\n\n const find$1 = find\n\n /**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\n function head(array) {\n return array && array.length ? array[0] : undefined\n }\n\n /**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : []\n\n baseEach$1(collection, function (value, key, collection) {\n result[++index] = iteratee(value, key, collection)\n })\n return result\n }\n\n /**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\n function map(collection, iteratee) {\n var func = isArray$1(collection) ? arrayMap : baseMap\n return func(collection, baseIteratee(iteratee))\n }\n\n /**\n * Creates a flattened array of values by running each element in `collection`\n * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMap(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), 1)\n }\n\n /** Used for built-in method references. */\n var objectProto$2 = Object.prototype\n\n /** Used to check objects for own properties. */\n var hasOwnProperty$2 = objectProto$2.hasOwnProperty\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\n var groupBy = createAggregator(function (result, value, key) {\n if (hasOwnProperty$2.call(result, key)) {\n result[key].push(value)\n } else {\n baseAssignValue(result, key, [value])\n }\n })\n\n const groupBy$1 = groupBy\n\n /** Used for built-in method references. */\n var objectProto$1 = Object.prototype\n\n /** Used to check objects for own properties. */\n var hasOwnProperty$1 = objectProto$1.hasOwnProperty\n\n /**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHas(object, key) {\n return object != null && hasOwnProperty$1.call(object, key)\n }\n\n /**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\n function has(object, path) {\n return object != null && hasPath(object, path, baseHas)\n }\n\n /** `Object#toString` result references. */\n var stringTag = '[object String]'\n\n /**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\n function isString(value) {\n return typeof value == 'string' || (!isArray$1(value) && isObjectLike(value) && baseGetTag(value) == stringTag)\n }\n\n /**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\n function baseValues(object, props) {\n return arrayMap(props, function (key) {\n return object[key]\n })\n }\n\n /**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\n function values(object) {\n return object == null ? [] : baseValues(object, keys(object))\n }\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeMax$1 = Math.max\n\n /**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\n function includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection)\n fromIndex = fromIndex && !guard ? toInteger(fromIndex) : 0\n\n var length = collection.length\n if (fromIndex < 0) {\n fromIndex = nativeMax$1(length + fromIndex, 0)\n }\n return isString(collection)\n ? fromIndex <= length && collection.indexOf(value, fromIndex) > -1\n : !!length && baseIndexOf(collection, value, fromIndex) > -1\n }\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeMax = Math.max\n\n /**\n * Gets the index at which the first occurrence of `value` is found in `array`\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. If `fromIndex` is negative, it's used as the\n * offset from the end of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.indexOf([1, 2, 1, 2], 2);\n * // => 1\n *\n * // Search from the `fromIndex`.\n * _.indexOf([1, 2, 1, 2], 2, 2);\n * // => 3\n */\n function indexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length\n if (!length) {\n return -1\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex)\n if (index < 0) {\n index = nativeMax(length + index, 0)\n }\n return baseIndexOf(array, value, index)\n }\n\n /** `Object#toString` result references. */\n var mapTag = '[object Map]',\n setTag = '[object Set]'\n\n /** Used for built-in method references. */\n var objectProto = Object.prototype\n\n /** Used to check objects for own properties. */\n var hasOwnProperty = objectProto.hasOwnProperty\n\n /**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\n function isEmpty(value) {\n if (value == null) {\n return true\n }\n if (\n isArrayLike(value) &&\n (isArray$1(value) ||\n typeof value == 'string' ||\n typeof value.splice == 'function' ||\n isBuffer$1(value) ||\n isTypedArray$1(value) ||\n isArguments$1(value))\n ) {\n return !value.length\n }\n var tag = getTag$1(value)\n if (tag == mapTag || tag == setTag) {\n return !value.size\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false\n }\n }\n return true\n }\n\n /** `Object#toString` result references. */\n var regexpTag = '[object RegExp]'\n\n /**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\n function baseIsRegExp(value) {\n return isObjectLike(value) && baseGetTag(value) == regexpTag\n }\n\n /* Node.js helper references. */\n var nodeIsRegExp = nodeUtil$1 && nodeUtil$1.isRegExp\n\n /**\n * Checks if `value` is classified as a `RegExp` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\n var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp\n\n const isRegExp$1 = isRegExp\n\n /**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\n function isUndefined(value) {\n return value === undefined\n }\n\n /** Error message constants. */\n var FUNC_ERROR_TEXT = 'Expected a function'\n\n /**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n * return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\n function negate(predicate) {\n if (typeof predicate != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT)\n }\n return function () {\n var args = arguments\n switch (args.length) {\n case 0:\n return !predicate.call(this)\n case 1:\n return !predicate.call(this, args[0])\n case 2:\n return !predicate.call(this, args[0], args[1])\n case 3:\n return !predicate.call(this, args[0], args[1], args[2])\n }\n return !predicate.apply(this, args)\n }\n }\n\n /**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object\n }\n path = castPath(path, object)\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object\n }\n\n if (index != lastIndex) {\n var objValue = nested[key]\n newValue = customizer ? customizer(objValue, key, nested) : undefined\n if (newValue === undefined) {\n newValue = isObject(objValue) ? objValue : isIndex(path[index + 1]) ? [] : {}\n }\n }\n assignValue(nested, key, newValue)\n nested = nested[key]\n }\n return object\n }\n\n /**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\n function basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {}\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path)\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value)\n }\n }\n return result\n }\n\n /**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\n function pickBy(object, predicate) {\n if (object == null) {\n return {}\n }\n var props = arrayMap(getAllKeysIn(object), function (prop) {\n return [prop]\n })\n predicate = baseIteratee(predicate)\n return basePickBy(object, props, function (value, path) {\n return predicate(value, path[0])\n })\n }\n\n /**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\n function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function (value, index, collection) {\n accumulator = initAccum ? ((initAccum = false), value) : iteratee(accumulator, value, index, collection)\n })\n return accumulator\n }\n\n /**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\n function reduce(collection, iteratee, accumulator) {\n var func = isArray$1(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3\n\n return func(collection, baseIteratee(iteratee), accumulator, initAccum, baseEach$1)\n }\n\n /**\n * The opposite of `_.filter`; this method returns the elements of `collection`\n * that `predicate` does **not** return truthy for.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.filter\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true }\n * ];\n *\n * _.reject(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.reject(users, { 'age': 40, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.reject(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.reject(users, 'active');\n * // => objects for ['barney']\n */\n function reject(collection, predicate) {\n var func = isArray$1(collection) ? arrayFilter : baseFilter\n return func(collection, negate(baseIteratee(predicate)))\n }\n\n /**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function baseSome(collection, predicate) {\n var result\n\n baseEach$1(collection, function (value, index, collection) {\n result = predicate(value, index, collection)\n return !result\n })\n return !!result\n }\n\n /**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\n function some(collection, predicate, guard) {\n var func = isArray$1(collection) ? arraySome : baseSome\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined\n }\n return func(collection, baseIteratee(predicate))\n }\n\n /** Used as references for various `Number` constants. */\n var INFINITY = 1 / 0\n\n /**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\n var createSet = !(Set$1 && 1 / setToArray(new Set$1([, -0]))[1] == INFINITY)\n ? noop\n : function (values) {\n return new Set$1(values)\n }\n\n const createSet$1 = createSet\n\n /** Used as the size to enable large array optimizations. */\n var LARGE_ARRAY_SIZE = 200\n\n /**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result\n\n if (comparator) {\n isCommon = false\n includes = arrayIncludesWith\n } else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet$1(array)\n if (set) {\n return setToArray(set)\n }\n isCommon = false\n includes = cacheHas\n seen = new SetCache()\n } else {\n seen = iteratee ? [] : result\n }\n outer: while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value\n\n value = comparator || value !== 0 ? value : 0\n if (isCommon && computed === computed) {\n var seenIndex = seen.length\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer\n }\n }\n if (iteratee) {\n seen.push(computed)\n }\n result.push(value)\n } else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed)\n }\n result.push(value)\n }\n }\n return result\n }\n\n /**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\n function uniq(array) {\n return array && array.length ? baseUniq(array) : []\n }\n\n function PRINT_ERROR(msg) {\n /* istanbul ignore else - can't override global.console in node.js */\n if (console && console.error) {\n console.error(`Error: ${msg}`)\n }\n }\n function PRINT_WARNING(msg) {\n /* istanbul ignore else - can't override global.console in node.js*/\n if (console && console.warn) {\n // TODO: modify docs accordingly\n console.warn(`Warning: ${msg}`)\n }\n }\n\n function timer(func) {\n const start = new Date().getTime()\n const val = func()\n const end = new Date().getTime()\n const total = end - start\n return { time: total, value: val }\n }\n\n // based on: https://github.com/petkaantonov/bluebird/blob/b97c0d2d487e8c5076e8bd897e0dcd4622d31846/src/util.js#L201-L216\n function toFastProperties(toBecomeFast) {\n function FakeConstructor() {}\n // If our object is used as a constructor, it would receive\n FakeConstructor.prototype = toBecomeFast\n const fakeInstance = new FakeConstructor()\n function fakeAccess() {\n return typeof fakeInstance.bar\n }\n // help V8 understand this is a \"real\" prototype by actually using\n // the fake instance.\n fakeAccess()\n fakeAccess()\n // Always true condition to suppress the Firefox warning of unreachable\n // code after a return statement.\n return toBecomeFast\n }\n\n // TODO: duplicated code to avoid extracting another sub-package -- how to avoid?\n function tokenLabel$1(tokType) {\n if (hasTokenLabel$1(tokType)) {\n return tokType.LABEL\n } else {\n return tokType.name\n }\n }\n // TODO: duplicated code to avoid extracting another sub-package -- how to avoid?\n function hasTokenLabel$1(obj) {\n return isString(obj.LABEL) && obj.LABEL !== ''\n }\n class AbstractProduction {\n get definition() {\n return this._definition\n }\n set definition(value) {\n this._definition = value\n }\n constructor(_definition) {\n this._definition = _definition\n }\n accept(visitor) {\n visitor.visit(this)\n forEach(this.definition, (prod) => {\n prod.accept(visitor)\n })\n }\n }\n class NonTerminal extends AbstractProduction {\n constructor(options) {\n super([])\n this.idx = 1\n assign$1(\n this,\n pickBy(options, (v) => v !== undefined),\n )\n }\n set definition(definition) {\n // immutable\n }\n get definition() {\n if (this.referencedRule !== undefined) {\n return this.referencedRule.definition\n }\n return []\n }\n accept(visitor) {\n visitor.visit(this)\n // don't visit children of a reference, we will get cyclic infinite loops if we do so\n }\n }\n class Rule extends AbstractProduction {\n constructor(options) {\n super(options.definition)\n this.orgText = ''\n assign$1(\n this,\n pickBy(options, (v) => v !== undefined),\n )\n }\n }\n class Alternative extends AbstractProduction {\n constructor(options) {\n super(options.definition)\n this.ignoreAmbiguities = false\n assign$1(\n this,\n pickBy(options, (v) => v !== undefined),\n )\n }\n }\n class Option extends AbstractProduction {\n constructor(options) {\n super(options.definition)\n this.idx = 1\n assign$1(\n this,\n pickBy(options, (v) => v !== undefined),\n )\n }\n }\n class RepetitionMandatory extends AbstractProduction {\n constructor(options) {\n super(options.definition)\n this.idx = 1\n assign$1(\n this,\n pickBy(options, (v) => v !== undefined),\n )\n }\n }\n class RepetitionMandatoryWithSeparator extends AbstractProduction {\n constructor(options) {\n super(options.definition)\n this.idx = 1\n assign$1(\n this,\n pickBy(options, (v) => v !== undefined),\n )\n }\n }\n class Repetition extends AbstractProduction {\n constructor(options) {\n super(options.definition)\n this.idx = 1\n assign$1(\n this,\n pickBy(options, (v) => v !== undefined),\n )\n }\n }\n class RepetitionWithSeparator extends AbstractProduction {\n constructor(options) {\n super(options.definition)\n this.idx = 1\n assign$1(\n this,\n pickBy(options, (v) => v !== undefined),\n )\n }\n }\n class Alternation extends AbstractProduction {\n get definition() {\n return this._definition\n }\n set definition(value) {\n this._definition = value\n }\n constructor(options) {\n super(options.definition)\n this.idx = 1\n this.ignoreAmbiguities = false\n this.hasPredicates = false\n assign$1(\n this,\n pickBy(options, (v) => v !== undefined),\n )\n }\n }\n class Terminal {\n constructor(options) {\n this.idx = 1\n assign$1(\n this,\n pickBy(options, (v) => v !== undefined),\n )\n }\n accept(visitor) {\n visitor.visit(this)\n }\n }\n function serializeGrammar(topRules) {\n return map(topRules, serializeProduction)\n }\n function serializeProduction(node) {\n function convertDefinition(definition) {\n return map(definition, serializeProduction)\n }\n /* istanbul ignore else */\n if (node instanceof NonTerminal) {\n const serializedNonTerminal = {\n type: 'NonTerminal',\n name: node.nonTerminalName,\n idx: node.idx,\n }\n if (isString(node.label)) {\n serializedNonTerminal.label = node.label\n }\n return serializedNonTerminal\n } else if (node instanceof Alternative) {\n return {\n type: 'Alternative',\n definition: convertDefinition(node.definition),\n }\n } else if (node instanceof Option) {\n return {\n type: 'Option',\n idx: node.idx,\n definition: convertDefinition(node.definition),\n }\n } else if (node instanceof RepetitionMandatory) {\n return {\n type: 'RepetitionMandatory',\n idx: node.idx,\n definition: convertDefinition(node.definition),\n }\n } else if (node instanceof RepetitionMandatoryWithSeparator) {\n return {\n type: 'RepetitionMandatoryWithSeparator',\n idx: node.idx,\n separator: serializeProduction(new Terminal({ terminalType: node.separator })),\n definition: convertDefinition(node.definition),\n }\n } else if (node instanceof RepetitionWithSeparator) {\n return {\n type: 'RepetitionWithSeparator',\n idx: node.idx,\n separator: serializeProduction(new Terminal({ terminalType: node.separator })),\n definition: convertDefinition(node.definition),\n }\n } else if (node instanceof Repetition) {\n return {\n type: 'Repetition',\n idx: node.idx,\n definition: convertDefinition(node.definition),\n }\n } else if (node instanceof Alternation) {\n return {\n type: 'Alternation',\n idx: node.idx,\n definition: convertDefinition(node.definition),\n }\n } else if (node instanceof Terminal) {\n const serializedTerminal = {\n type: 'Terminal',\n name: node.terminalType.name,\n label: tokenLabel$1(node.terminalType),\n idx: node.idx,\n }\n if (isString(node.label)) {\n serializedTerminal.terminalLabel = node.label\n }\n const pattern = node.terminalType.PATTERN\n if (node.terminalType.PATTERN) {\n serializedTerminal.pattern = isRegExp$1(pattern) ? pattern.source : pattern\n }\n return serializedTerminal\n } else if (node instanceof Rule) {\n return {\n type: 'Rule',\n name: node.name,\n orgText: node.orgText,\n definition: convertDefinition(node.definition),\n }\n /* c8 ignore next 3 */\n } else {\n throw Error('non exhaustive match')\n }\n }\n\n class GAstVisitor {\n visit(node) {\n const nodeAny = node\n switch (nodeAny.constructor) {\n case NonTerminal:\n return this.visitNonTerminal(nodeAny)\n case Alternative:\n return this.visitAlternative(nodeAny)\n case Option:\n return this.visitOption(nodeAny)\n case RepetitionMandatory:\n return this.visitRepetitionMandatory(nodeAny)\n case RepetitionMandatoryWithSeparator:\n return this.visitRepetitionMandatoryWithSeparator(nodeAny)\n case RepetitionWithSeparator:\n return this.visitRepetitionWithSeparator(nodeAny)\n case Repetition:\n return this.visitRepetition(nodeAny)\n case Alternation:\n return this.visitAlternation(nodeAny)\n case Terminal:\n return this.visitTerminal(nodeAny)\n case Rule:\n return this.visitRule(nodeAny)\n /* c8 ignore next 2 */\n default:\n throw Error('non exhaustive match')\n }\n }\n /* c8 ignore next */\n visitNonTerminal(node) {}\n /* c8 ignore next */\n visitAlternative(node) {}\n /* c8 ignore next */\n visitOption(node) {}\n /* c8 ignore next */\n visitRepetition(node) {}\n /* c8 ignore next */\n visitRepetitionMandatory(node) {}\n /* c8 ignore next 3 */\n visitRepetitionMandatoryWithSeparator(node) {}\n /* c8 ignore next */\n visitRepetitionWithSeparator(node) {}\n /* c8 ignore next */\n visitAlternation(node) {}\n /* c8 ignore next */\n visitTerminal(node) {}\n /* c8 ignore next */\n visitRule(node) {}\n }\n\n function isSequenceProd(prod) {\n return (\n prod instanceof Alternative ||\n prod instanceof Option ||\n prod instanceof Repetition ||\n prod instanceof RepetitionMandatory ||\n prod instanceof RepetitionMandatoryWithSeparator ||\n prod instanceof RepetitionWithSeparator ||\n prod instanceof Terminal ||\n prod instanceof Rule\n )\n }\n function isOptionalProd(prod, alreadyVisited = []) {\n const isDirectlyOptional =\n prod instanceof Option || prod instanceof Repetition || prod instanceof RepetitionWithSeparator\n if (isDirectlyOptional) {\n return true\n }\n // note that this can cause infinite loop if one optional empty TOP production has a cyclic dependency with another\n // empty optional top rule\n // may be indirectly optional ((A?B?C?) | (D?E?F?))\n if (prod instanceof Alternation) {\n // for OR its enough for just one of the alternatives to be optional\n return some(prod.definition, (subProd) => {\n return isOptionalProd(subProd, alreadyVisited)\n })\n } else if (prod instanceof NonTerminal && includes(alreadyVisited, prod)) {\n // avoiding stack overflow due to infinite recursion\n return false\n } else if (prod instanceof AbstractProduction) {\n if (prod instanceof NonTerminal) {\n alreadyVisited.push(prod)\n }\n return every(prod.definition, (subProd) => {\n return isOptionalProd(subProd, alreadyVisited)\n })\n } else {\n return false\n }\n }\n function isBranchingProd(prod) {\n return prod instanceof Alternation\n }\n function getProductionDslName(prod) {\n /* istanbul ignore else */\n if (prod instanceof NonTerminal) {\n return 'SUBRULE'\n } else if (prod instanceof Option) {\n return 'OPTION'\n } else if (prod instanceof Alternation) {\n return 'OR'\n } else if (prod instanceof RepetitionMandatory) {\n return 'AT_LEAST_ONE'\n } else if (prod instanceof RepetitionMandatoryWithSeparator) {\n return 'AT_LEAST_ONE_SEP'\n } else if (prod instanceof RepetitionWithSeparator) {\n return 'MANY_SEP'\n } else if (prod instanceof Repetition) {\n return 'MANY'\n } else if (prod instanceof Terminal) {\n return 'CONSUME'\n /* c8 ignore next 3 */\n } else {\n throw Error('non exhaustive match')\n }\n }\n\n /**\n * A Grammar Walker that computes the \"remaining\" grammar \"after\" a productions in the grammar.\n */\n class RestWalker {\n walk(prod, prevRest = []) {\n forEach(prod.definition, (subProd, index) => {\n const currRest = drop(prod.definition, index + 1)\n /* istanbul ignore else */\n if (subProd instanceof NonTerminal) {\n this.walkProdRef(subProd, currRest, prevRest)\n } else if (subProd instanceof Terminal) {\n this.walkTerminal(subProd, currRest, prevRest)\n } else if (subProd instanceof Alternative) {\n this.walkFlat(subProd, currRest, prevRest)\n } else if (subProd instanceof Option) {\n this.walkOption(subProd, currRest, prevRest)\n } else if (subProd instanceof RepetitionMandatory) {\n this.walkAtLeastOne(subProd, currRest, prevRest)\n } else if (subProd instanceof RepetitionMandatoryWithSeparator) {\n this.walkAtLeastOneSep(subProd, currRest, prevRest)\n } else if (subProd instanceof RepetitionWithSeparator) {\n this.walkManySep(subProd, currRest, prevRest)\n } else if (subProd instanceof Repetition) {\n this.walkMany(subProd, currRest, prevRest)\n } else if (subProd instanceof Alternation) {\n this.walkOr(subProd, currRest, prevRest)\n } else {\n throw Error('non exhaustive match')\n }\n })\n }\n walkTerminal(terminal, currRest, prevRest) {}\n walkProdRef(refProd, currRest, prevRest) {}\n walkFlat(flatProd, currRest, prevRest) {\n // ABCDEF => after the D the rest is EF\n const fullOrRest = currRest.concat(prevRest)\n this.walk(flatProd, fullOrRest)\n }\n walkOption(optionProd, currRest, prevRest) {\n // ABC(DE)?F => after the (DE)? the rest is F\n const fullOrRest = currRest.concat(prevRest)\n this.walk(optionProd, fullOrRest)\n }\n walkAtLeastOne(atLeastOneProd, currRest, prevRest) {\n // ABC(DE)+F => after the (DE)+ the rest is (DE)?F\n const fullAtLeastOneRest = [new Option({ definition: atLeastOneProd.definition })].concat(currRest, prevRest)\n this.walk(atLeastOneProd, fullAtLeastOneRest)\n }\n walkAtLeastOneSep(atLeastOneSepProd, currRest, prevRest) {\n // ABC DE(,DE)* F => after the (,DE)+ the rest is (,DE)?F\n const fullAtLeastOneSepRest = restForRepetitionWithSeparator(atLeastOneSepProd, currRest, prevRest)\n this.walk(atLeastOneSepProd, fullAtLeastOneSepRest)\n }\n walkMany(manyProd, currRest, prevRest) {\n // ABC(DE)*F => after the (DE)* the rest is (DE)?F\n const fullManyRest = [new Option({ definition: manyProd.definition })].concat(currRest, prevRest)\n this.walk(manyProd, fullManyRest)\n }\n walkManySep(manySepProd, currRest, prevRest) {\n // ABC (DE(,DE)*)? F => after the (,DE)* the rest is (,DE)?F\n const fullManySepRest = restForRepetitionWithSeparator(manySepProd, currRest, prevRest)\n this.walk(manySepProd, fullManySepRest)\n }\n walkOr(orProd, currRest, prevRest) {\n // ABC(D|E|F)G => when finding the (D|E|F) the rest is G\n const fullOrRest = currRest.concat(prevRest)\n // walk all different alternatives\n forEach(orProd.definition, (alt) => {\n // wrapping each alternative in a single definition wrapper\n // to avoid errors in computing the rest of that alternative in the invocation to computeInProdFollows\n // (otherwise for OR([alt1,alt2]) alt2 will be considered in 'rest' of alt1\n const prodWrapper = new Alternative({ definition: [alt] })\n this.walk(prodWrapper, fullOrRest)\n })\n }\n }\n function restForRepetitionWithSeparator(repSepProd, currRest, prevRest) {\n const repSepRest = [\n new Option({\n definition: [new Terminal({ terminalType: repSepProd.separator })].concat(repSepProd.definition),\n }),\n ]\n const fullRepSepRest = repSepRest.concat(currRest, prevRest)\n return fullRepSepRest\n }\n\n function first(prod) {\n /* istanbul ignore else */\n if (prod instanceof NonTerminal) {\n // this could in theory cause infinite loops if\n // (1) prod A refs prod B.\n // (2) prod B refs prod A\n // (3) AB can match the empty set\n // in other words a cycle where everything is optional so the first will keep\n // looking ahead for the next optional part and will never exit\n // currently there is no safeguard for this unique edge case because\n // (1) not sure a grammar in which this can happen is useful for anything (productive)\n return first(prod.referencedRule)\n } else if (prod instanceof Terminal) {\n return firstForTerminal(prod)\n } else if (isSequenceProd(prod)) {\n return firstForSequence(prod)\n } else if (isBranchingProd(prod)) {\n return firstForBranching(prod)\n } else {\n throw Error('non exhaustive match')\n }\n }\n function firstForSequence(prod) {\n let firstSet = []\n const seq = prod.definition\n let nextSubProdIdx = 0\n let hasInnerProdsRemaining = seq.length > nextSubProdIdx\n let currSubProd\n // so we enter the loop at least once (if the definition is not empty\n let isLastInnerProdOptional = true\n // scan a sequence until it's end or until we have found a NONE optional production in it\n while (hasInnerProdsRemaining && isLastInnerProdOptional) {\n currSubProd = seq[nextSubProdIdx]\n isLastInnerProdOptional = isOptionalProd(currSubProd)\n firstSet = firstSet.concat(first(currSubProd))\n nextSubProdIdx = nextSubProdIdx + 1\n hasInnerProdsRemaining = seq.length > nextSubProdIdx\n }\n return uniq(firstSet)\n }\n function firstForBranching(prod) {\n const allAlternativesFirsts = map(prod.definition, (innerProd) => {\n return first(innerProd)\n })\n return uniq(flatten(allAlternativesFirsts))\n }\n function firstForTerminal(terminal) {\n return [terminal.terminalType]\n }\n\n // TODO: can this be removed? where is it used?\n const IN = '_~IN~_'\n\n // This ResyncFollowsWalker computes all of the follows required for RESYNC\n // (skipping reference production).\n class ResyncFollowsWalker extends RestWalker {\n constructor(topProd) {\n super()\n this.topProd = topProd\n this.follows = {}\n }\n startWalking() {\n this.walk(this.topProd)\n return this.follows\n }\n walkTerminal(terminal, currRest, prevRest) {\n // do nothing! just like in the public sector after 13:00\n }\n walkProdRef(refProd, currRest, prevRest) {\n const followName = buildBetweenProdsFollowPrefix(refProd.referencedRule, refProd.idx) + this.topProd.name\n const fullRest = currRest.concat(prevRest)\n const restProd = new Alternative({ definition: fullRest })\n const t_in_topProd_follows = first(restProd)\n this.follows[followName] = t_in_topProd_follows\n }\n }\n function computeAllProdsFollows(topProductions) {\n const reSyncFollows = {}\n forEach(topProductions, (topProd) => {\n const currRefsFollow = new ResyncFollowsWalker(topProd).startWalking()\n assign$1(reSyncFollows, currRefsFollow)\n })\n return reSyncFollows\n }\n function buildBetweenProdsFollowPrefix(inner, occurenceInParent) {\n return inner.name + occurenceInParent + IN\n }\n\n function cc(char) {\n return char.charCodeAt(0)\n }\n function insertToSet(item, set) {\n if (Array.isArray(item)) {\n item.forEach(function (subItem) {\n set.push(subItem)\n })\n } else {\n set.push(item)\n }\n }\n function addFlag(flagObj, flagKey) {\n if (flagObj[flagKey] === true) {\n throw 'duplicate flag ' + flagKey\n }\n flagObj[flagKey]\n flagObj[flagKey] = true\n }\n function ASSERT_EXISTS(obj) {\n // istanbul ignore next\n if (obj === undefined) {\n throw Error('Internal Error - Should never get here!')\n }\n return true\n }\n // istanbul ignore next\n function ASSERT_NEVER_REACH_HERE() {\n throw Error('Internal Error - Should never get here!')\n }\n function isCharacter(obj) {\n return obj['type'] === 'Character'\n }\n\n const digitsCharCodes = []\n for (let i = cc('0'); i <= cc('9'); i++) {\n digitsCharCodes.push(i)\n }\n const wordCharCodes = [cc('_')].concat(digitsCharCodes)\n for (let i = cc('a'); i <= cc('z'); i++) {\n wordCharCodes.push(i)\n }\n for (let i = cc('A'); i <= cc('Z'); i++) {\n wordCharCodes.push(i)\n }\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#character-classes\n const whitespaceCodes = [\n cc(' '),\n cc('\\f'),\n cc('\\n'),\n cc('\\r'),\n cc('\\t'),\n cc('\\v'),\n cc('\\t'),\n cc('\\u00a0'),\n cc('\\u1680'),\n cc('\\u2000'),\n cc('\\u2001'),\n cc('\\u2002'),\n cc('\\u2003'),\n cc('\\u2004'),\n cc('\\u2005'),\n cc('\\u2006'),\n cc('\\u2007'),\n cc('\\u2008'),\n cc('\\u2009'),\n cc('\\u200a'),\n cc('\\u2028'),\n cc('\\u2029'),\n cc('\\u202f'),\n cc('\\u205f'),\n cc('\\u3000'),\n cc('\\ufeff'),\n ]\n\n // consts and utilities\n const hexDigitPattern = /[0-9a-fA-F]/\n const decimalPattern = /[0-9]/\n const decimalPatternNoZero = /[1-9]/\n // https://hackernoon.com/the-madness-of-parsing-real-world-javascript-regexps-d9ee336df983\n // https://www.ecma-international.org/ecma-262/8.0/index.html#prod-Pattern\n class RegExpParser {\n constructor() {\n this.idx = 0\n this.input = ''\n this.groupIdx = 0\n }\n saveState() {\n return {\n idx: this.idx,\n input: this.input,\n groupIdx: this.groupIdx,\n }\n }\n restoreState(newState) {\n this.idx = newState.idx\n this.input = newState.input\n this.groupIdx = newState.groupIdx\n }\n pattern(input) {\n // parser state\n this.idx = 0\n this.input = input\n this.groupIdx = 0\n this.consumeChar('/')\n const value = this.disjunction()\n this.consumeChar('/')\n const flags = {\n type: 'Flags',\n loc: { begin: this.idx, end: input.length },\n global: false,\n ignoreCase: false,\n multiLine: false,\n unicode: false,\n sticky: false,\n }\n while (this.isRegExpFlag()) {\n switch (this.popChar()) {\n case 'g':\n addFlag(flags, 'global')\n break\n case 'i':\n addFlag(flags, 'ignoreCase')\n break\n case 'm':\n addFlag(flags, 'multiLine')\n break\n case 'u':\n addFlag(flags, 'unicode')\n break\n case 'y':\n addFlag(flags, 'sticky')\n break\n }\n }\n if (this.idx !== this.input.length) {\n throw Error('Redundant input: ' + this.input.substring(this.idx))\n }\n return {\n type: 'Pattern',\n flags: flags,\n value: value,\n loc: this.loc(0),\n }\n }\n disjunction() {\n const alts = []\n const begin = this.idx\n alts.push(this.alternative())\n while (this.peekChar() === '|') {\n this.consumeChar('|')\n alts.push(this.alternative())\n }\n return { type: 'Disjunction', value: alts, loc: this.loc(begin) }\n }\n alternative() {\n const terms = []\n const begin = this.idx\n while (this.isTerm()) {\n terms.push(this.term())\n }\n return { type: 'Alternative', value: terms, loc: this.loc(begin) }\n }\n term() {\n if (this.isAssertion()) {\n return this.assertion()\n } else {\n return this.atom()\n }\n }\n assertion() {\n const begin = this.idx\n switch (this.popChar()) {\n case '^':\n return {\n type: 'StartAnchor',\n loc: this.loc(begin),\n }\n case '$':\n return { type: 'EndAnchor', loc: this.loc(begin) }\n // '\\b' or '\\B'\n case '\\\\':\n switch (this.popChar()) {\n case 'b':\n return {\n type: 'WordBoundary',\n loc: this.loc(begin),\n }\n case 'B':\n return {\n type: 'NonWordBoundary',\n loc: this.loc(begin),\n }\n }\n // istanbul ignore next\n throw Error('Invalid Assertion Escape')\n // '(?=' or '(?!'\n case '(':\n this.consumeChar('?')\n let type\n switch (this.popChar()) {\n case '=':\n type = 'Lookahead'\n break\n case '!':\n type = 'NegativeLookahead'\n break\n }\n ASSERT_EXISTS(type)\n const disjunction = this.disjunction()\n this.consumeChar(')')\n return {\n type: type,\n value: disjunction,\n loc: this.loc(begin),\n }\n }\n // istanbul ignore next\n return ASSERT_NEVER_REACH_HERE()\n }\n quantifier(isBacktracking = false) {\n let range = undefined\n const begin = this.idx\n switch (this.popChar()) {\n case '*':\n range = {\n atLeast: 0,\n atMost: Infinity,\n }\n break\n case '+':\n range = {\n atLeast: 1,\n atMost: Infinity,\n }\n break\n case '?':\n range = {\n atLeast: 0,\n atMost: 1,\n }\n break\n case '{':\n const atLeast = this.integerIncludingZero()\n switch (this.popChar()) {\n case '}':\n range = {\n atLeast: atLeast,\n atMost: atLeast,\n }\n break\n case ',':\n let atMost\n if (this.isDigit()) {\n atMost = this.integerIncludingZero()\n range = {\n atLeast: atLeast,\n atMost: atMost,\n }\n } else {\n range = {\n atLeast: atLeast,\n atMost: Infinity,\n }\n }\n this.consumeChar('}')\n break\n }\n // throwing exceptions from \"ASSERT_EXISTS\" during backtracking\n // causes severe performance degradations\n if (isBacktracking === true && range === undefined) {\n return undefined\n }\n ASSERT_EXISTS(range)\n break\n }\n // throwing exceptions from \"ASSERT_EXISTS\" during backtracking\n // causes severe performance degradations\n if (isBacktracking === true && range === undefined) {\n return undefined\n }\n // istanbul ignore else\n if (ASSERT_EXISTS(range)) {\n if (this.peekChar(0) === '?') {\n this.consumeChar('?')\n range.greedy = false\n } else {\n range.greedy = true\n }\n range.type = 'Quantifier'\n range.loc = this.loc(begin)\n return range\n }\n }\n atom() {\n let atom\n const begin = this.idx\n switch (this.peekChar()) {\n case '.':\n atom = this.dotAll()\n break\n case '\\\\':\n atom = this.atomEscape()\n break\n case '[':\n atom = this.characterClass()\n break\n case '(':\n atom = this.group()\n break\n }\n if (atom === undefined && this.isPatternCharacter()) {\n atom = this.patternCharacter()\n }\n // istanbul ignore else\n if (ASSERT_EXISTS(atom)) {\n atom.loc = this.loc(begin)\n if (this.isQuantifier()) {\n atom.quantifier = this.quantifier()\n }\n return atom\n }\n }\n dotAll() {\n this.consumeChar('.')\n return {\n type: 'Set',\n complement: true,\n value: [cc('\\n'), cc('\\r'), cc('\\u2028'), cc('\\u2029')],\n }\n }\n atomEscape() {\n this.consumeChar('\\\\')\n switch (this.peekChar()) {\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9':\n return this.decimalEscapeAtom()\n case 'd':\n case 'D':\n case 's':\n case 'S':\n case 'w':\n case 'W':\n return this.characterClassEscape()\n case 'f':\n case 'n':\n case 'r':\n case 't':\n case 'v':\n return this.controlEscapeAtom()\n case 'c':\n return this.controlLetterEscapeAtom()\n case '0':\n return this.nulCharacterAtom()\n case 'x':\n return this.hexEscapeSequenceAtom()\n case 'u':\n return this.regExpUnicodeEscapeSequenceAtom()\n default:\n return this.identityEscapeAtom()\n }\n }\n decimalEscapeAtom() {\n const value = this.positiveInteger()\n return { type: 'GroupBackReference', value: value }\n }\n characterClassEscape() {\n let set\n let complement = false\n switch (this.popChar()) {\n case 'd':\n set = digitsCharCodes\n break\n case 'D':\n set = digitsCharCodes\n complement = true\n break\n case 's':\n set = whitespaceCodes\n break\n case 'S':\n set = whitespaceCodes\n complement = true\n break\n case 'w':\n set = wordCharCodes\n break\n case 'W':\n set = wordCharCodes\n complement = true\n break\n }\n // istanbul ignore else\n if (ASSERT_EXISTS(set)) {\n return { type: 'Set', value: set, complement: complement }\n }\n }\n controlEscapeAtom() {\n let escapeCode\n switch (this.popChar()) {\n case 'f':\n escapeCode = cc('\\f')\n break\n case 'n':\n escapeCode = cc('\\n')\n break\n case 'r':\n escapeCode = cc('\\r')\n break\n case 't':\n escapeCode = cc('\\t')\n break\n case 'v':\n escapeCode = cc('\\v')\n break\n }\n // istanbul ignore else\n if (ASSERT_EXISTS(escapeCode)) {\n return { type: 'Character', value: escapeCode }\n }\n }\n controlLetterEscapeAtom() {\n this.consumeChar('c')\n const letter = this.popChar()\n if (/[a-zA-Z]/.test(letter) === false) {\n throw Error('Invalid ')\n }\n const letterCode = letter.toUpperCase().charCodeAt(0) - 64\n return { type: 'Character', value: letterCode }\n }\n nulCharacterAtom() {\n // TODO implement '[lookahead ∉ DecimalDigit]'\n // TODO: for the deprecated octal escape sequence\n this.consumeChar('0')\n return { type: 'Character', value: cc('\\0') }\n }\n hexEscapeSequenceAtom() {\n this.consumeChar('x')\n return this.parseHexDigits(2)\n }\n regExpUnicodeEscapeSequenceAtom() {\n this.consumeChar('u')\n return this.parseHexDigits(4)\n }\n identityEscapeAtom() {\n // TODO: implement \"SourceCharacter but not UnicodeIDContinue\"\n // // http://unicode.org/reports/tr31/#Specific_Character_Adjustments\n const escapedChar = this.popChar()\n return { type: 'Character', value: cc(escapedChar) }\n }\n classPatternCharacterAtom() {\n switch (this.peekChar()) {\n // istanbul ignore next\n case '\\n':\n // istanbul ignore next\n case '\\r':\n // istanbul ignore next\n case '\\u2028':\n // istanbul ignore next\n case '\\u2029':\n // istanbul ignore next\n case '\\\\':\n // istanbul ignore next\n case ']':\n throw Error('TBD')\n default:\n const nextChar = this.popChar()\n return { type: 'Character', value: cc(nextChar) }\n }\n }\n characterClass() {\n const set = []\n let complement = false\n this.consumeChar('[')\n if (this.peekChar(0) === '^') {\n this.consumeChar('^')\n complement = true\n }\n while (this.isClassAtom()) {\n const from = this.classAtom()\n from.type === 'Character'\n if (isCharacter(from) && this.isRangeDash()) {\n this.consumeChar('-')\n const to = this.classAtom()\n to.type === 'Character'\n // a range can only be used when both sides are single characters\n if (isCharacter(to)) {\n if (to.value < from.value) {\n throw Error('Range out of order in character class')\n }\n set.push({ from: from.value, to: to.value })\n } else {\n // literal dash\n insertToSet(from.value, set)\n set.push(cc('-'))\n insertToSet(to.value, set)\n }\n } else {\n insertToSet(from.value, set)\n }\n }\n this.consumeChar(']')\n return { type: 'Set', complement: complement, value: set }\n }\n classAtom() {\n switch (this.peekChar()) {\n // istanbul ignore next\n case ']':\n // istanbul ignore next\n case '\\n':\n // istanbul ignore next\n case '\\r':\n // istanbul ignore next\n case '\\u2028':\n // istanbul ignore next\n case '\\u2029':\n throw Error('TBD')\n case '\\\\':\n return this.classEscape()\n default:\n return this.classPatternCharacterAtom()\n }\n }\n classEscape() {\n this.consumeChar('\\\\')\n switch (this.peekChar()) {\n // Matches a backspace.\n // (Not to be confused with \\b word boundary outside characterClass)\n case 'b':\n this.consumeChar('b')\n return { type: 'Character', value: cc('\\u0008') }\n case 'd':\n case 'D':\n case 's':\n case 'S':\n case 'w':\n case 'W':\n return this.characterClassEscape()\n case 'f':\n case 'n':\n case 'r':\n case 't':\n case 'v':\n return this.controlEscapeAtom()\n case 'c':\n return this.controlLetterEscapeAtom()\n case '0':\n return this.nulCharacterAtom()\n case 'x':\n return this.hexEscapeSequenceAtom()\n case 'u':\n return this.regExpUnicodeEscapeSequenceAtom()\n default:\n return this.identityEscapeAtom()\n }\n }\n group() {\n let capturing = true\n this.consumeChar('(')\n switch (this.peekChar(0)) {\n case '?':\n this.consumeChar('?')\n this.consumeChar(':')\n capturing = false\n break\n default:\n this.groupIdx++\n break\n }\n const value = this.disjunction()\n this.consumeChar(')')\n const groupAst = {\n type: 'Group',\n capturing: capturing,\n value: value,\n }\n if (capturing) {\n groupAst['idx'] = this.groupIdx\n }\n return groupAst\n }\n positiveInteger() {\n let number = this.popChar()\n // istanbul ignore next - can't ever get here due to previous lookahead checks\n // still implementing this error checking in case this ever changes.\n if (decimalPatternNoZero.test(number) === false) {\n throw Error('Expecting a positive integer')\n }\n while (decimalPattern.test(this.peekChar(0))) {\n number += this.popChar()\n }\n return parseInt(number, 10)\n }\n integerIncludingZero() {\n let number = this.popChar()\n if (decimalPattern.test(number) === false) {\n throw Error('Expecting an integer')\n }\n while (decimalPattern.test(this.peekChar(0))) {\n number += this.popChar()\n }\n return parseInt(number, 10)\n }\n patternCharacter() {\n const nextChar = this.popChar()\n switch (nextChar) {\n // istanbul ignore next\n case '\\n':\n // istanbul ignore next\n case '\\r':\n // istanbul ignore next\n case '\\u2028':\n // istanbul ignore next\n case '\\u2029':\n // istanbul ignore next\n case '^':\n // istanbul ignore next\n case '$':\n // istanbul ignore next\n case '\\\\':\n // istanbul ignore next\n case '.':\n // istanbul ignore next\n case '*':\n // istanbul ignore next\n case '+':\n // istanbul ignore next\n case '?':\n // istanbul ignore next\n case '(':\n // istanbul ignore next\n case ')':\n // istanbul ignore next\n case '[':\n // istanbul ignore next\n case '|':\n // istanbul ignore next\n throw Error('TBD')\n default:\n return { type: 'Character', value: cc(nextChar) }\n }\n }\n isRegExpFlag() {\n switch (this.peekChar(0)) {\n case 'g':\n case 'i':\n case 'm':\n case 'u':\n case 'y':\n return true\n default:\n return false\n }\n }\n isRangeDash() {\n return this.peekChar() === '-' && this.isClassAtom(1)\n }\n isDigit() {\n return decimalPattern.test(this.peekChar(0))\n }\n isClassAtom(howMuch = 0) {\n switch (this.peekChar(howMuch)) {\n case ']':\n case '\\n':\n case '\\r':\n case '\\u2028':\n case '\\u2029':\n return false\n default:\n return true\n }\n }\n isTerm() {\n return this.isAtom() || this.isAssertion()\n }\n isAtom() {\n if (this.isPatternCharacter()) {\n return true\n }\n switch (this.peekChar(0)) {\n case '.':\n case '\\\\': // atomEscape\n case '[': // characterClass\n // TODO: isAtom must be called before isAssertion - disambiguate\n case '(': // group\n return true\n default:\n return false\n }\n }\n isAssertion() {\n switch (this.peekChar(0)) {\n case '^':\n case '$':\n return true\n // '\\b' or '\\B'\n case '\\\\':\n switch (this.peekChar(1)) {\n case 'b':\n case 'B':\n return true\n default:\n return false\n }\n // '(?=' or '(?!'\n case '(':\n return this.peekChar(1) === '?' && (this.peekChar(2) === '=' || this.peekChar(2) === '!')\n default:\n return false\n }\n }\n isQuantifier() {\n const prevState = this.saveState()\n try {\n return this.quantifier(true) !== undefined\n } catch (e) {\n return false\n } finally {\n this.restoreState(prevState)\n }\n }\n isPatternCharacter() {\n switch (this.peekChar()) {\n case '^':\n case '$':\n case '\\\\':\n case '.':\n case '*':\n case '+':\n case '?':\n case '(':\n case ')':\n case '[':\n case '|':\n case '/':\n case '\\n':\n case '\\r':\n case '\\u2028':\n case '\\u2029':\n return false\n default:\n return true\n }\n }\n parseHexDigits(howMany) {\n let hexString = ''\n for (let i = 0; i < howMany; i++) {\n const hexChar = this.popChar()\n if (hexDigitPattern.test(hexChar) === false) {\n throw Error('Expecting a HexDecimal digits')\n }\n hexString += hexChar\n }\n const charCode = parseInt(hexString, 16)\n return { type: 'Character', value: charCode }\n }\n peekChar(howMuch = 0) {\n return this.input[this.idx + howMuch]\n }\n popChar() {\n const nextChar = this.peekChar(0)\n this.consumeChar(undefined)\n return nextChar\n }\n consumeChar(char) {\n if (char !== undefined && this.input[this.idx] !== char) {\n throw Error(\"Expected: '\" + char + \"' but found: '\" + this.input[this.idx] + \"' at offset: \" + this.idx)\n }\n if (this.idx >= this.input.length) {\n throw Error('Unexpected end of input')\n }\n this.idx++\n }\n loc(begin) {\n return { begin: begin, end: this.idx }\n }\n }\n\n class BaseRegExpVisitor {\n visitChildren(node) {\n for (const key in node) {\n const child = node[key]\n /* istanbul ignore else */\n if (node.hasOwnProperty(key)) {\n if (child.type !== undefined) {\n this.visit(child)\n } else if (Array.isArray(child)) {\n child.forEach((subChild) => {\n this.visit(subChild)\n }, this)\n }\n }\n }\n }\n visit(node) {\n switch (node.type) {\n case 'Pattern':\n this.visitPattern(node)\n break\n case 'Flags':\n this.visitFlags(node)\n break\n case 'Disjunction':\n this.visitDisjunction(node)\n break\n case 'Alternative':\n this.visitAlternative(node)\n break\n case 'StartAnchor':\n this.visitStartAnchor(node)\n break\n case 'EndAnchor':\n this.visitEndAnchor(node)\n break\n case 'WordBoundary':\n this.visitWordBoundary(node)\n break\n case 'NonWordBoundary':\n this.visitNonWordBoundary(node)\n break\n case 'Lookahead':\n this.visitLookahead(node)\n break\n case 'NegativeLookahead':\n this.visitNegativeLookahead(node)\n break\n case 'Character':\n this.visitCharacter(node)\n break\n case 'Set':\n this.visitSet(node)\n break\n case 'Group':\n this.visitGroup(node)\n break\n case 'GroupBackReference':\n this.visitGroupBackReference(node)\n break\n case 'Quantifier':\n this.visitQuantifier(node)\n break\n }\n this.visitChildren(node)\n }\n visitPattern(node) {}\n visitFlags(node) {}\n visitDisjunction(node) {}\n visitAlternative(node) {}\n // Assertion\n visitStartAnchor(node) {}\n visitEndAnchor(node) {}\n visitWordBoundary(node) {}\n visitNonWordBoundary(node) {}\n visitLookahead(node) {}\n visitNegativeLookahead(node) {}\n // atoms\n visitCharacter(node) {}\n visitSet(node) {}\n visitGroup(node) {}\n visitGroupBackReference(node) {}\n visitQuantifier(node) {}\n }\n\n let regExpAstCache = {}\n const regExpParser = new RegExpParser()\n function getRegExpAst(regExp) {\n const regExpStr = regExp.toString()\n if (regExpAstCache.hasOwnProperty(regExpStr)) {\n return regExpAstCache[regExpStr]\n } else {\n const regExpAst = regExpParser.pattern(regExpStr)\n regExpAstCache[regExpStr] = regExpAst\n return regExpAst\n }\n }\n function clearRegExpParserCache() {\n regExpAstCache = {}\n }\n\n const complementErrorMessage = 'Complement Sets are not supported for first char optimization'\n const failedOptimizationPrefixMsg = 'Unable to use \"first char\" lexer optimizations:\\n'\n function getOptimizedStartCodesIndices(regExp, ensureOptimizations = false) {\n try {\n const ast = getRegExpAst(regExp)\n const firstChars = firstCharOptimizedIndices(ast.value, {}, ast.flags.ignoreCase)\n return firstChars\n } catch (e) {\n /* istanbul ignore next */\n // Testing this relies on the regexp-to-ast library having a bug... */\n // TODO: only the else branch needs to be ignored, try to fix with newer prettier / tsc\n if (e.message === complementErrorMessage) {\n if (ensureOptimizations) {\n PRINT_WARNING(\n `${failedOptimizationPrefixMsg}` +\n `\\tUnable to optimize: < ${regExp.toString()} >\\n` +\n '\\tComplement Sets cannot be automatically optimized.\\n' +\n \"\\tThis will disable the lexer's first char optimizations.\\n\" +\n '\\tSee: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.',\n )\n }\n } else {\n let msgSuffix = ''\n if (ensureOptimizations) {\n msgSuffix =\n \"\\n\\tThis will disable the lexer's first char optimizations.\\n\" +\n '\\tSee: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.'\n }\n PRINT_ERROR(\n `${failedOptimizationPrefixMsg}\\n` +\n `\\tFailed parsing: < ${regExp.toString()} >\\n` +\n `\\tUsing the @chevrotain/regexp-to-ast library\\n` +\n '\\tPlease open an issue at: https://github.com/chevrotain/chevrotain/issues' +\n msgSuffix,\n )\n }\n }\n return []\n }\n function firstCharOptimizedIndices(ast, result, ignoreCase) {\n switch (ast.type) {\n case 'Disjunction':\n for (let i = 0; i < ast.value.length; i++) {\n firstCharOptimizedIndices(ast.value[i], result, ignoreCase)\n }\n break\n case 'Alternative':\n const terms = ast.value\n for (let i = 0; i < terms.length; i++) {\n const term = terms[i]\n // skip terms that cannot effect the first char results\n switch (term.type) {\n case 'EndAnchor':\n // A group back reference cannot affect potential starting char.\n // because if a back reference is the first production than automatically\n // the group being referenced has had to come BEFORE so its codes have already been added\n case 'GroupBackReference':\n // assertions do not affect potential starting codes\n case 'Lookahead':\n case 'NegativeLookahead':\n case 'StartAnchor':\n case 'WordBoundary':\n case 'NonWordBoundary':\n continue\n }\n const atom = term\n switch (atom.type) {\n case 'Character':\n addOptimizedIdxToResult(atom.value, result, ignoreCase)\n break\n case 'Set':\n if (atom.complement === true) {\n throw Error(complementErrorMessage)\n }\n forEach(atom.value, (code) => {\n if (typeof code === 'number') {\n addOptimizedIdxToResult(code, result, ignoreCase)\n } else {\n // range\n const range = code\n // cannot optimize when ignoreCase is\n if (ignoreCase === true) {\n for (let rangeCode = range.from; rangeCode <= range.to; rangeCode++) {\n addOptimizedIdxToResult(rangeCode, result, ignoreCase)\n }\n }\n // Optimization (2 orders of magnitude less work for very large ranges)\n else {\n // handle unoptimized values\n for (\n let rangeCode = range.from;\n rangeCode <= range.to && rangeCode < minOptimizationVal;\n rangeCode++\n ) {\n addOptimizedIdxToResult(rangeCode, result, ignoreCase)\n }\n // Less common charCode where we optimize for faster init time, by using larger \"buckets\"\n if (range.to >= minOptimizationVal) {\n const minUnOptVal = range.from >= minOptimizationVal ? range.from : minOptimizationVal\n const maxUnOptVal = range.to\n const minOptIdx = charCodeToOptimizedIndex(minUnOptVal)\n const maxOptIdx = charCodeToOptimizedIndex(maxUnOptVal)\n for (let currOptIdx = minOptIdx; currOptIdx <= maxOptIdx; currOptIdx++) {\n result[currOptIdx] = currOptIdx\n }\n }\n }\n }\n })\n break\n case 'Group':\n firstCharOptimizedIndices(atom.value, result, ignoreCase)\n break\n /* istanbul ignore next */\n default:\n throw Error('Non Exhaustive Match')\n }\n // reached a mandatory production, no more **start** codes can be found on this alternative\n const isOptionalQuantifier = atom.quantifier !== undefined && atom.quantifier.atLeast === 0\n if (\n // A group may be optional due to empty contents /(?:)/\n // or if everything inside it is optional /((a)?)/\n (atom.type === 'Group' && isWholeOptional(atom) === false) ||\n // If this term is not a group it may only be optional if it has an optional quantifier\n (atom.type !== 'Group' && isOptionalQuantifier === false)\n ) {\n break\n }\n }\n break\n /* istanbul ignore next */\n default:\n throw Error('non exhaustive match!')\n }\n // console.log(Object.keys(result).length)\n return values(result)\n }\n function addOptimizedIdxToResult(code, result, ignoreCase) {\n const optimizedCharIdx = charCodeToOptimizedIndex(code)\n result[optimizedCharIdx] = optimizedCharIdx\n if (ignoreCase === true) {\n handleIgnoreCase(code, result)\n }\n }\n function handleIgnoreCase(code, result) {\n const char = String.fromCharCode(code)\n const upperChar = char.toUpperCase()\n /* istanbul ignore else */\n if (upperChar !== char) {\n const optimizedCharIdx = charCodeToOptimizedIndex(upperChar.charCodeAt(0))\n result[optimizedCharIdx] = optimizedCharIdx\n } else {\n const lowerChar = char.toLowerCase()\n if (lowerChar !== char) {\n const optimizedCharIdx = charCodeToOptimizedIndex(lowerChar.charCodeAt(0))\n result[optimizedCharIdx] = optimizedCharIdx\n }\n }\n }\n function findCode(setNode, targetCharCodes) {\n return find$1(setNode.value, (codeOrRange) => {\n if (typeof codeOrRange === 'number') {\n return includes(targetCharCodes, codeOrRange)\n } else {\n // range\n const range = codeOrRange\n return find$1(targetCharCodes, (targetCode) => range.from <= targetCode && targetCode <= range.to) !== undefined\n }\n })\n }\n function isWholeOptional(ast) {\n const quantifier = ast.quantifier\n if (quantifier && quantifier.atLeast === 0) {\n return true\n }\n if (!ast.value) {\n return false\n }\n return isArray$1(ast.value) ? every(ast.value, isWholeOptional) : isWholeOptional(ast.value)\n }\n class CharCodeFinder extends BaseRegExpVisitor {\n constructor(targetCharCodes) {\n super()\n this.targetCharCodes = targetCharCodes\n this.found = false\n }\n visitChildren(node) {\n // No need to keep looking...\n if (this.found === true) {\n return\n }\n // switch lookaheads as they do not actually consume any characters thus\n // finding a charCode at lookahead context does not mean that regexp can actually contain it in a match.\n switch (node.type) {\n case 'Lookahead':\n this.visitLookahead(node)\n return\n case 'NegativeLookahead':\n this.visitNegativeLookahead(node)\n return\n }\n super.visitChildren(node)\n }\n visitCharacter(node) {\n if (includes(this.targetCharCodes, node.value)) {\n this.found = true\n }\n }\n visitSet(node) {\n if (node.complement) {\n if (findCode(node, this.targetCharCodes) === undefined) {\n this.found = true\n }\n } else {\n if (findCode(node, this.targetCharCodes) !== undefined) {\n this.found = true\n }\n }\n }\n }\n function canMatchCharCode(charCodes, pattern) {\n if (pattern instanceof RegExp) {\n const ast = getRegExpAst(pattern)\n const charCodeFinder = new CharCodeFinder(charCodes)\n charCodeFinder.visit(ast)\n return charCodeFinder.found\n } else {\n return (\n find$1(pattern, (char) => {\n return includes(charCodes, char.charCodeAt(0))\n }) !== undefined\n )\n }\n }\n\n const PATTERN = 'PATTERN'\n const DEFAULT_MODE = 'defaultMode'\n const MODES = 'modes'\n let SUPPORT_STICKY = typeof new RegExp('(?:)').sticky === 'boolean'\n function analyzeTokenTypes(tokenTypes, options) {\n options = defaults$1(options, {\n useSticky: SUPPORT_STICKY,\n debug: false,\n safeMode: false,\n positionTracking: 'full',\n lineTerminatorCharacters: ['\\r', '\\n'],\n tracer: (msg, action) => action(),\n })\n const tracer = options.tracer\n tracer('initCharCodeToOptimizedIndexMap', () => {\n initCharCodeToOptimizedIndexMap()\n })\n let onlyRelevantTypes\n tracer('Reject Lexer.NA', () => {\n onlyRelevantTypes = reject(tokenTypes, (currType) => {\n return currType[PATTERN] === Lexer.NA\n })\n })\n let hasCustom = false\n let allTransformedPatterns\n tracer('Transform Patterns', () => {\n hasCustom = false\n allTransformedPatterns = map(onlyRelevantTypes, (currType) => {\n const currPattern = currType[PATTERN]\n /* istanbul ignore else */\n if (isRegExp$1(currPattern)) {\n const regExpSource = currPattern.source\n if (\n regExpSource.length === 1 &&\n // only these regExp meta characters which can appear in a length one regExp\n regExpSource !== '^' &&\n regExpSource !== '$' &&\n regExpSource !== '.' &&\n !currPattern.ignoreCase\n ) {\n return regExpSource\n } else if (\n regExpSource.length === 2 &&\n regExpSource[0] === '\\\\' &&\n // not a meta character\n !includes(['d', 'D', 's', 'S', 't', 'r', 'n', 't', '0', 'c', 'b', 'B', 'f', 'v', 'w', 'W'], regExpSource[1])\n ) {\n // escaped meta Characters: /\\+/ /\\[/\n // or redundant escaping: /\\a/\n // without the escaping \"\\\"\n return regExpSource[1]\n } else {\n return options.useSticky ? addStickyFlag(currPattern) : addStartOfInput(currPattern)\n }\n } else if (isFunction(currPattern)) {\n hasCustom = true\n // CustomPatternMatcherFunc - custom patterns do not require any transformations, only wrapping in a RegExp Like object\n return { exec: currPattern }\n } else if (typeof currPattern === 'object') {\n hasCustom = true\n // ICustomPattern\n return currPattern\n } else if (typeof currPattern === 'string') {\n if (currPattern.length === 1) {\n return currPattern\n } else {\n const escapedRegExpString = currPattern.replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n const wrappedRegExp = new RegExp(escapedRegExpString)\n return options.useSticky ? addStickyFlag(wrappedRegExp) : addStartOfInput(wrappedRegExp)\n }\n } else {\n throw Error('non exhaustive match')\n }\n })\n })\n let patternIdxToType\n let patternIdxToGroup\n let patternIdxToLongerAltIdxArr\n let patternIdxToPushMode\n let patternIdxToPopMode\n tracer('misc mapping', () => {\n patternIdxToType = map(onlyRelevantTypes, (currType) => currType.tokenTypeIdx)\n patternIdxToGroup = map(onlyRelevantTypes, (clazz) => {\n const groupName = clazz.GROUP\n /* istanbul ignore next */\n if (groupName === Lexer.SKIPPED) {\n return undefined\n } else if (isString(groupName)) {\n return groupName\n } else if (isUndefined(groupName)) {\n return false\n } else {\n throw Error('non exhaustive match')\n }\n })\n patternIdxToLongerAltIdxArr = map(onlyRelevantTypes, (clazz) => {\n const longerAltType = clazz.LONGER_ALT\n if (longerAltType) {\n const longerAltIdxArr = isArray$1(longerAltType)\n ? map(longerAltType, (type) => indexOf(onlyRelevantTypes, type))\n : [indexOf(onlyRelevantTypes, longerAltType)]\n return longerAltIdxArr\n }\n })\n patternIdxToPushMode = map(onlyRelevantTypes, (clazz) => clazz.PUSH_MODE)\n patternIdxToPopMode = map(onlyRelevantTypes, (clazz) => has(clazz, 'POP_MODE'))\n })\n let patternIdxToCanLineTerminator\n tracer('Line Terminator Handling', () => {\n const lineTerminatorCharCodes = getCharCodes(options.lineTerminatorCharacters)\n patternIdxToCanLineTerminator = map(onlyRelevantTypes, (tokType) => false)\n if (options.positionTracking !== 'onlyOffset') {\n patternIdxToCanLineTerminator = map(onlyRelevantTypes, (tokType) => {\n if (has(tokType, 'LINE_BREAKS')) {\n return !!tokType.LINE_BREAKS\n } else {\n return (\n checkLineBreaksIssues(tokType, lineTerminatorCharCodes) === false &&\n canMatchCharCode(lineTerminatorCharCodes, tokType.PATTERN)\n )\n }\n })\n }\n })\n let patternIdxToIsCustom\n let patternIdxToShort\n let emptyGroups\n let patternIdxToConfig\n tracer('Misc Mapping #2', () => {\n patternIdxToIsCustom = map(onlyRelevantTypes, isCustomPattern)\n patternIdxToShort = map(allTransformedPatterns, isShortPattern)\n emptyGroups = reduce(\n onlyRelevantTypes,\n (acc, clazz) => {\n const groupName = clazz.GROUP\n if (isString(groupName) && !(groupName === Lexer.SKIPPED)) {\n acc[groupName] = []\n }\n return acc\n },\n {},\n )\n patternIdxToConfig = map(allTransformedPatterns, (x, idx) => {\n return {\n pattern: allTransformedPatterns[idx],\n longerAlt: patternIdxToLongerAltIdxArr[idx],\n canLineTerminator: patternIdxToCanLineTerminator[idx],\n isCustom: patternIdxToIsCustom[idx],\n short: patternIdxToShort[idx],\n group: patternIdxToGroup[idx],\n push: patternIdxToPushMode[idx],\n pop: patternIdxToPopMode[idx],\n tokenTypeIdx: patternIdxToType[idx],\n tokenType: onlyRelevantTypes[idx],\n }\n })\n })\n let canBeOptimized = true\n let charCodeToPatternIdxToConfig = []\n if (!options.safeMode) {\n tracer('First Char Optimization', () => {\n charCodeToPatternIdxToConfig = reduce(\n onlyRelevantTypes,\n (result, currTokType, idx) => {\n if (typeof currTokType.PATTERN === 'string') {\n const charCode = currTokType.PATTERN.charCodeAt(0)\n const optimizedIdx = charCodeToOptimizedIndex(charCode)\n addToMapOfArrays(result, optimizedIdx, patternIdxToConfig[idx])\n } else if (isArray$1(currTokType.START_CHARS_HINT)) {\n let lastOptimizedIdx\n forEach(currTokType.START_CHARS_HINT, (charOrInt) => {\n const charCode = typeof charOrInt === 'string' ? charOrInt.charCodeAt(0) : charOrInt\n const currOptimizedIdx = charCodeToOptimizedIndex(charCode)\n // Avoid adding the config multiple times\n /* istanbul ignore else */\n // - Difficult to check this scenario effects as it is only a performance\n // optimization that does not change correctness\n if (lastOptimizedIdx !== currOptimizedIdx) {\n lastOptimizedIdx = currOptimizedIdx\n addToMapOfArrays(result, currOptimizedIdx, patternIdxToConfig[idx])\n }\n })\n } else if (isRegExp$1(currTokType.PATTERN)) {\n if (currTokType.PATTERN.unicode) {\n canBeOptimized = false\n if (options.ensureOptimizations) {\n PRINT_ERROR(\n `${failedOptimizationPrefixMsg}` +\n `\\tUnable to analyze < ${currTokType.PATTERN.toString()} > pattern.\\n` +\n '\\tThe regexp unicode flag is not currently supported by the regexp-to-ast library.\\n' +\n \"\\tThis will disable the lexer's first char optimizations.\\n\" +\n '\\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE',\n )\n }\n } else {\n const optimizedCodes = getOptimizedStartCodesIndices(currTokType.PATTERN, options.ensureOptimizations)\n /* istanbul ignore if */\n // start code will only be empty given an empty regExp or failure of regexp-to-ast library\n // the first should be a different validation and the second cannot be tested.\n if (isEmpty(optimizedCodes)) {\n // we cannot understand what codes may start possible matches\n // The optimization correctness requires knowing start codes for ALL patterns.\n // Not actually sure this is an error, no debug message\n canBeOptimized = false\n }\n forEach(optimizedCodes, (code) => {\n addToMapOfArrays(result, code, patternIdxToConfig[idx])\n })\n }\n } else {\n if (options.ensureOptimizations) {\n PRINT_ERROR(\n `${failedOptimizationPrefixMsg}` +\n `\\tTokenType: <${currTokType.name}> is using a custom token pattern without providing <start_chars_hint> parameter.\\n` +\n \"\\tThis will disable the lexer's first char optimizations.\\n\" +\n '\\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE',\n )\n }\n canBeOptimized = false\n }\n return result\n },\n [],\n )\n })\n }\n return {\n emptyGroups: emptyGroups,\n patternIdxToConfig: patternIdxToConfig,\n charCodeToPatternIdxToConfig: charCodeToPatternIdxToConfig,\n hasCustom: hasCustom,\n canBeOptimized: canBeOptimized,\n }\n }\n function validatePatterns(tokenTypes, validModesNames) {\n let errors = []\n const missingResult = findMissingPatterns(tokenTypes)\n errors = errors.concat(missingResult.errors)\n const invalidResult = findInvalidPatterns(missingResult.valid)\n const validTokenTypes = invalidResult.valid\n errors = errors.concat(invalidResult.errors)\n errors = errors.concat(validateRegExpPattern(validTokenTypes))\n errors = errors.concat(findInvalidGroupType(validTokenTypes))\n errors = errors.concat(findModesThatDoNotExist(validTokenTypes, validModesNames))\n errors = errors.concat(findUnreachablePatterns(validTokenTypes))\n return errors\n }\n function validateRegExpPattern(tokenTypes) {\n let errors = []\n const withRegExpPatterns = filter(tokenTypes, (currTokType) => isRegExp$1(currTokType[PATTERN]))\n errors = errors.concat(findEndOfInputAnchor(withRegExpPatterns))\n errors = errors.concat(findStartOfInputAnchor(withRegExpPatterns))\n errors = errors.concat(findUnsupportedFlags(withRegExpPatterns))\n errors = errors.concat(findDuplicatePatterns(withRegExpPatterns))\n errors = errors.concat(findEmptyMatchRegExps(withRegExpPatterns))\n return errors\n }\n function findMissingPatterns(tokenTypes) {\n const tokenTypesWithMissingPattern = filter(tokenTypes, (currType) => {\n return !has(currType, PATTERN)\n })\n const errors = map(tokenTypesWithMissingPattern, (currType) => {\n return {\n message: 'Token Type: ->' + currType.name + \"<- missing static 'PATTERN' property\",\n type: LexerDefinitionErrorType.MISSING_PATTERN,\n tokenTypes: [currType],\n }\n })\n const valid = difference$1(tokenTypes, tokenTypesWithMissingPattern)\n return { errors, valid }\n }\n function findInvalidPatterns(tokenTypes) {\n const tokenTypesWithInvalidPattern = filter(tokenTypes, (currType) => {\n const pattern = currType[PATTERN]\n return !isRegExp$1(pattern) && !isFunction(pattern) && !has(pattern, 'exec') && !isString(pattern)\n })\n const errors = map(tokenTypesWithInvalidPattern, (currType) => {\n return {\n message:\n 'Token Type: ->' +\n currType.name +\n \"<- static 'PATTERN' can only be a RegExp, a\" +\n ' Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.',\n type: LexerDefinitionErrorType.INVALID_PATTERN,\n tokenTypes: [currType],\n }\n })\n const valid = difference$1(tokenTypes, tokenTypesWithInvalidPattern)\n return { errors, valid }\n }\n const end_of_input = /[^\\\\][$]/\n function findEndOfInputAnchor(tokenTypes) {\n class EndAnchorFinder extends BaseRegExpVisitor {\n constructor() {\n super(...arguments)\n this.found = false\n }\n visitEndAnchor(node) {\n this.found = true\n }\n }\n const invalidRegex = filter(tokenTypes, (currType) => {\n const pattern = currType.PATTERN\n try {\n const regexpAst = getRegExpAst(pattern)\n const endAnchorVisitor = new EndAnchorFinder()\n endAnchorVisitor.visit(regexpAst)\n return endAnchorVisitor.found\n } catch (e) {\n // old behavior in case of runtime exceptions with regexp-to-ast.\n /* istanbul ignore next - cannot ensure an error in regexp-to-ast*/\n return end_of_input.test(pattern.source)\n }\n })\n const errors = map(invalidRegex, (currType) => {\n return {\n message:\n 'Unexpected RegExp Anchor Error:\\n' +\n '\\tToken Type: ->' +\n currType.name +\n \"<- static 'PATTERN' cannot contain end of input anchor '$'\\n\" +\n '\\tSee chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS' +\n '\\tfor details.',\n type: LexerDefinitionErrorType.EOI_ANCHOR_FOUND,\n tokenTypes: [currType],\n }\n })\n return errors\n }\n function findEmptyMatchRegExps(tokenTypes) {\n const matchesEmptyString = filter(tokenTypes, (currType) => {\n const pattern = currType.PATTERN\n return pattern.test('')\n })\n const errors = map(matchesEmptyString, (currType) => {\n return {\n message: 'Token Type: ->' + currType.name + \"<- static 'PATTERN' must not match an empty string\",\n type: LexerDefinitionErrorType.EMPTY_MATCH_PATTERN,\n tokenTypes: [currType],\n }\n })\n return errors\n }\n const start_of_input = /[^\\\\[][\\^]|^\\^/\n function findStartOfInputAnchor(tokenTypes) {\n class StartAnchorFinder extends BaseRegExpVisitor {\n constructor() {\n super(...arguments)\n this.found = false\n }\n visitStartAnchor(node) {\n this.found = true\n }\n }\n const invalidRegex = filter(tokenTypes, (currType) => {\n const pattern = currType.PATTERN\n try {\n const regexpAst = getRegExpAst(pattern)\n const startAnchorVisitor = new StartAnchorFinder()\n startAnchorVisitor.visit(regexpAst)\n return startAnchorVisitor.found\n } catch (e) {\n // old behavior in case of runtime exceptions with regexp-to-ast.\n /* istanbul ignore next - cannot ensure an error in regexp-to-ast*/\n return start_of_input.test(pattern.source)\n }\n })\n const errors = map(invalidRegex, (currType) => {\n return {\n message:\n 'Unexpected RegExp Anchor Error:\\n' +\n '\\tToken Type: ->' +\n currType.name +\n \"<- static 'PATTERN' cannot contain start of input anchor '^'\\n\" +\n '\\tSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS' +\n '\\tfor details.',\n type: LexerDefinitionErrorType.SOI_ANCHOR_FOUND,\n tokenTypes: [currType],\n }\n })\n return errors\n }\n function findUnsupportedFlags(tokenTypes) {\n const invalidFlags = filter(tokenTypes, (currType) => {\n const pattern = currType[PATTERN]\n return pattern instanceof RegExp && (pattern.multiline || pattern.global)\n })\n const errors = map(invalidFlags, (currType) => {\n return {\n message: 'Token Type: ->' + currType.name + \"<- static 'PATTERN' may NOT contain global('g') or multiline('m')\",\n type: LexerDefinitionErrorType.UNSUPPORTED_FLAGS_FOUND,\n tokenTypes: [currType],\n }\n })\n return errors\n }\n // This can only test for identical duplicate RegExps, not semantically equivalent ones.\n function findDuplicatePatterns(tokenTypes) {\n const found = []\n let identicalPatterns = map(tokenTypes, (outerType) => {\n return reduce(\n tokenTypes,\n (result, innerType) => {\n if (\n outerType.PATTERN.source === innerType.PATTERN.source &&\n !includes(found, innerType) &&\n innerType.PATTERN !== Lexer.NA\n ) {\n // this avoids duplicates in the result, each Token Type may only appear in one \"set\"\n // in essence we are creating Equivalence classes on equality relation.\n found.push(innerType)\n result.push(innerType)\n return result\n }\n return result\n },\n [],\n )\n })\n identicalPatterns = compact(identicalPatterns)\n const duplicatePatterns = filter(identicalPatterns, (currIdenticalSet) => {\n return currIdenticalSet.length > 1\n })\n const errors = map(duplicatePatterns, (setOfIdentical) => {\n const tokenTypeNames = map(setOfIdentical, (currType) => {\n return currType.name\n })\n const dupPatternSrc = head(setOfIdentical).PATTERN\n return {\n message:\n `The same RegExp pattern ->${dupPatternSrc}<-` +\n `has been used in all of the following Token Types: ${tokenTypeNames.join(', ')} <-`,\n type: LexerDefinitionErrorType.DUPLICATE_PATTERNS_FOUND,\n tokenTypes: setOfIdentical,\n }\n })\n return errors\n }\n function findInvalidGroupType(tokenTypes) {\n const invalidTypes = filter(tokenTypes, (clazz) => {\n if (!has(clazz, 'GROUP')) {\n return false\n }\n const group = clazz.GROUP\n return group !== Lexer.SKIPPED && group !== Lexer.NA && !isString(group)\n })\n const errors = map(invalidTypes, (currType) => {\n return {\n message: 'Token Type: ->' + currType.name + \"<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String\",\n type: LexerDefinitionErrorType.INVALID_GROUP_TYPE_FOUND,\n tokenTypes: [currType],\n }\n })\n return errors\n }\n function findModesThatDoNotExist(tokenTypes, validModes) {\n const invalidModes = filter(tokenTypes, (clazz) => {\n return clazz.PUSH_MODE !== undefined && !includes(validModes, clazz.PUSH_MODE)\n })\n const errors = map(invalidModes, (tokType) => {\n const msg =\n `Token Type: ->${tokType.name}<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->${tokType.PUSH_MODE}<-` +\n `which does not exist`\n return {\n message: msg,\n type: LexerDefinitionErrorType.PUSH_MODE_DOES_NOT_EXIST,\n tokenTypes: [tokType],\n }\n })\n return errors\n }\n function findUnreachablePatterns(tokenTypes) {\n const errors = []\n const canBeTested = reduce(\n tokenTypes,\n (result, tokType, idx) => {\n const pattern = tokType.PATTERN\n if (pattern === Lexer.NA) {\n return result\n }\n // a more comprehensive validation for all forms of regExps would require\n // deeper regExp analysis capabilities\n if (isString(pattern)) {\n result.push({ str: pattern, idx, tokenType: tokType })\n } else if (isRegExp$1(pattern) && noMetaChar(pattern)) {\n result.push({ str: pattern.source, idx, tokenType: tokType })\n }\n return result\n },\n [],\n )\n forEach(tokenTypes, (tokType, testIdx) => {\n forEach(canBeTested, ({ str, idx, tokenType }) => {\n if (testIdx < idx && testTokenType(str, tokType.PATTERN)) {\n const msg =\n `Token: ->${tokenType.name}<- can never be matched.\\n` +\n `Because it appears AFTER the Token Type ->${tokType.name}<-` +\n `in the lexer's definition.\\n` +\n `See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`\n errors.push({\n message: msg,\n type: LexerDefinitionErrorType.UNREACHABLE_PATTERN,\n tokenTypes: [tokType, tokenType],\n })\n }\n })\n })\n return errors\n }\n function testTokenType(str, pattern) {\n /* istanbul ignore else */\n if (isRegExp$1(pattern)) {\n const regExpArray = pattern.exec(str)\n return regExpArray !== null && regExpArray.index === 0\n } else if (isFunction(pattern)) {\n // maintain the API of custom patterns\n return pattern(str, 0, [], {})\n } else if (has(pattern, 'exec')) {\n // maintain the API of custom patterns\n return pattern.exec(str, 0, [], {})\n } else if (typeof pattern === 'string') {\n return pattern === str\n } else {\n throw Error('non exhaustive match')\n }\n }\n function noMetaChar(regExp) {\n //https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n const metaChars = ['.', '\\\\', '[', ']', '|', '^', '$', '(', ')', '?', '*', '+', '{']\n return find$1(metaChars, (char) => regExp.source.indexOf(char) !== -1) === undefined\n }\n function addStartOfInput(pattern) {\n const flags = pattern.ignoreCase ? 'i' : ''\n // always wrapping in a none capturing group preceded by '^' to make sure matching can only work on start of input.\n // duplicate/redundant start of input markers have no meaning (/^^^^A/ === /^A/)\n return new RegExp(`^(?:${pattern.source})`, flags)\n }\n function addStickyFlag(pattern) {\n const flags = pattern.ignoreCase ? 'iy' : 'y'\n // always wrapping in a none capturing group preceded by '^' to make sure matching can only work on start of input.\n // duplicate/redundant start of input markers have no meaning (/^^^^A/ === /^A/)\n return new RegExp(`${pattern.source}`, flags)\n }\n function performRuntimeChecks(lexerDefinition, trackLines, lineTerminatorCharacters) {\n const errors = []\n // some run time checks to help the end users.\n if (!has(lexerDefinition, DEFAULT_MODE)) {\n errors.push({\n message:\n 'A MultiMode Lexer cannot be initialized without a <' + DEFAULT_MODE + '> property in its definition\\n',\n type: LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE,\n })\n }\n if (!has(lexerDefinition, MODES)) {\n errors.push({\n message: 'A MultiMode Lexer cannot be initialized without a <' + MODES + '> property in its definition\\n',\n type: LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY,\n })\n }\n if (\n has(lexerDefinition, MODES) &&\n has(lexerDefinition, DEFAULT_MODE) &&\n !has(lexerDefinition.modes, lexerDefinition.defaultMode)\n ) {\n errors.push({\n message:\n `A MultiMode Lexer cannot be initialized with a ${DEFAULT_MODE}: <${lexerDefinition.defaultMode}>` +\n `which does not exist\\n`,\n type: LexerDefinitionErrorType.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST,\n })\n }\n if (has(lexerDefinition, MODES)) {\n forEach(lexerDefinition.modes, (currModeValue, currModeName) => {\n forEach(currModeValue, (currTokType, currIdx) => {\n if (isUndefined(currTokType)) {\n errors.push({\n message:\n `A Lexer cannot be initialized using an undefined Token Type. Mode:` +\n `<${currModeName}> at index: <${currIdx}>\\n`,\n type: LexerDefinitionErrorType.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED,\n })\n } else if (has(currTokType, 'LONGER_ALT')) {\n const longerAlt = isArray$1(currTokType.LONGER_ALT) ? currTokType.LONGER_ALT : [currTokType.LONGER_ALT]\n forEach(longerAlt, (currLongerAlt) => {\n if (!isUndefined(currLongerAlt) && !includes(currModeValue, currLongerAlt)) {\n errors.push({\n message: `A MultiMode Lexer cannot be initialized with a longer_alt <${currLongerAlt.name}> on token <${currTokType.name}> outside of mode <${currModeName}>\\n`,\n type: LexerDefinitionErrorType.MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE,\n })\n }\n })\n }\n })\n })\n }\n return errors\n }\n function performWarningRuntimeChecks(lexerDefinition, trackLines, lineTerminatorCharacters) {\n const warnings = []\n let hasAnyLineBreak = false\n const allTokenTypes = compact(flatten(values(lexerDefinition.modes)))\n const concreteTokenTypes = reject(allTokenTypes, (currType) => currType[PATTERN] === Lexer.NA)\n const terminatorCharCodes = getCharCodes(lineTerminatorCharacters)\n if (trackLines) {\n forEach(concreteTokenTypes, (tokType) => {\n const currIssue = checkLineBreaksIssues(tokType, terminatorCharCodes)\n if (currIssue !== false) {\n const message = buildLineBreakIssueMessage(tokType, currIssue)\n const warningDescriptor = {\n message,\n type: currIssue.issue,\n tokenType: tokType,\n }\n warnings.push(warningDescriptor)\n } else {\n // we don't want to attempt to scan if the user explicitly specified the line_breaks option.\n if (has(tokType, 'LINE_BREAKS')) {\n if (tokType.LINE_BREAKS === true) {\n hasAnyLineBreak = true\n }\n } else {\n if (canMatchCharCode(terminatorCharCodes, tokType.PATTERN)) {\n hasAnyLineBreak = true\n }\n }\n }\n })\n }\n if (trackLines && !hasAnyLineBreak) {\n warnings.push({\n message:\n 'Warning: No LINE_BREAKS Found.\\n' +\n '\\tThis Lexer has been defined to track line and column information,\\n' +\n '\\tBut none of the Token Types can be identified as matching a line terminator.\\n' +\n '\\tSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#LINE_BREAKS \\n' +\n '\\tfor details.',\n type: LexerDefinitionErrorType.NO_LINE_BREAKS_FLAGS,\n })\n }\n return warnings\n }\n function cloneEmptyGroups(emptyGroups) {\n const clonedResult = {}\n const groupKeys = keys(emptyGroups)\n forEach(groupKeys, (currKey) => {\n const currGroupValue = emptyGroups[currKey]\n /* istanbul ignore else */\n if (isArray$1(currGroupValue)) {\n clonedResult[currKey] = []\n } else {\n throw Error('non exhaustive match')\n }\n })\n return clonedResult\n }\n // TODO: refactor to avoid duplication\n function isCustomPattern(tokenType) {\n const pattern = tokenType.PATTERN\n /* istanbul ignore else */\n if (isRegExp$1(pattern)) {\n return false\n } else if (isFunction(pattern)) {\n // CustomPatternMatcherFunc - custom patterns do not require any transformations, only wrapping in a RegExp Like object\n return true\n } else if (has(pattern, 'exec')) {\n // ICustomPattern\n return true\n } else if (isString(pattern)) {\n return false\n } else {\n throw Error('non exhaustive match')\n }\n }\n function isShortPattern(pattern) {\n if (isString(pattern) && pattern.length === 1) {\n return pattern.charCodeAt(0)\n } else {\n return false\n }\n }\n /**\n * Faster than using a RegExp for default newline detection during lexing.\n */\n const LineTerminatorOptimizedTester = {\n // implements /\\n|\\r\\n?/g.test\n test: function (text) {\n const len = text.length\n for (let i = this.lastIndex; i < len; i++) {\n const c = text.charCodeAt(i)\n if (c === 10) {\n this.lastIndex = i + 1\n return true\n } else if (c === 13) {\n if (text.charCodeAt(i + 1) === 10) {\n this.lastIndex = i + 2\n } else {\n this.lastIndex = i + 1\n }\n return true\n }\n }\n return false\n },\n lastIndex: 0,\n }\n function checkLineBreaksIssues(tokType, lineTerminatorCharCodes) {\n if (has(tokType, 'LINE_BREAKS')) {\n // if the user explicitly declared the line_breaks option we will respect their choice\n // and assume it is correct.\n return false\n } else {\n /* istanbul ignore else */\n if (isRegExp$1(tokType.PATTERN)) {\n try {\n // TODO: why is the casting suddenly needed?\n canMatchCharCode(lineTerminatorCharCodes, tokType.PATTERN)\n } catch (e) {\n /* istanbul ignore next - to test this we would have to mock <canMatchCharCode> to throw an error */\n return {\n issue: LexerDefinitionErrorType.IDENTIFY_TERMINATOR,\n errMsg: e.message,\n }\n }\n return false\n } else if (isString(tokType.PATTERN)) {\n // string literal patterns can always be analyzed to detect line terminator usage\n return false\n } else if (isCustomPattern(tokType)) {\n // custom token types\n return { issue: LexerDefinitionErrorType.CUSTOM_LINE_BREAK }\n } else {\n throw Error('non exhaustive match')\n }\n }\n }\n function buildLineBreakIssueMessage(tokType, details) {\n /* istanbul ignore else */\n if (details.issue === LexerDefinitionErrorType.IDENTIFY_TERMINATOR) {\n return (\n 'Warning: unable to identify line terminator usage in pattern.\\n' +\n `\\tThe problem is in the <${tokType.name}> Token Type\\n` +\n `\\t Root cause: ${details.errMsg}.\\n` +\n '\\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR'\n )\n } else if (details.issue === LexerDefinitionErrorType.CUSTOM_LINE_BREAK) {\n return (\n 'Warning: A Custom Token Pattern should specify the <line_breaks> option.\\n' +\n `\\tThe problem is in the <${tokType.name}> Token Type\\n` +\n '\\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK'\n )\n } else {\n throw Error('non exhaustive match')\n }\n }\n function getCharCodes(charsOrCodes) {\n const charCodes = map(charsOrCodes, (numOrString) => {\n if (isString(numOrString)) {\n return numOrString.charCodeAt(0)\n } else {\n return numOrString\n }\n })\n return charCodes\n }\n function addToMapOfArrays(map, key, value) {\n if (map[key] === undefined) {\n map[key] = [value]\n } else {\n map[key].push(value)\n }\n }\n const minOptimizationVal = 256\n /**\n * We are mapping charCode above ASCI (256) into buckets each in the size of 256.\n * This is because ASCI are the most common start chars so each one of those will get its own\n * possible token configs vector.\n *\n * Tokens starting with charCodes \"above\" ASCI are uncommon, so we can \"afford\"\n * to place these into buckets of possible token configs, What we gain from\n * this is avoiding the case of creating an optimization 'charCodeToPatternIdxToConfig'\n * which would contain 10,000+ arrays of small size (e.g unicode Identifiers scenario).\n * Our 'charCodeToPatternIdxToConfig' max size will now be:\n * 256 + (2^16 / 2^8) - 1 === 511\n *\n * note the hack for fast division integer part extraction\n * See: https://stackoverflow.com/a/4228528\n */\n let charCodeToOptimizedIdxMap = []\n function charCodeToOptimizedIndex(charCode) {\n return charCode < minOptimizationVal ? charCode : charCodeToOptimizedIdxMap[charCode]\n }\n /**\n * This is a compromise between cold start / hot running performance\n * Creating this array takes ~3ms on a modern machine,\n * But if we perform the computation at runtime as needed the CSS Lexer benchmark\n * performance degrades by ~10%\n *\n * TODO: Perhaps it should be lazy initialized only if a charCode > 255 is used.\n */\n function initCharCodeToOptimizedIndexMap() {\n if (isEmpty(charCodeToOptimizedIdxMap)) {\n charCodeToOptimizedIdxMap = new Array(65536)\n for (let i = 0; i < 65536; i++) {\n charCodeToOptimizedIdxMap[i] = i > 255 ? 255 + ~~(i / 255) : i\n }\n }\n }\n\n function tokenStructuredMatcher(tokInstance, tokConstructor) {\n const instanceType = tokInstance.tokenTypeIdx\n if (instanceType === tokConstructor.tokenTypeIdx) {\n return true\n } else {\n return tokConstructor.isParent === true && tokConstructor.categoryMatchesMap[instanceType] === true\n }\n }\n // Optimized tokenMatcher in case our grammar does not use token categories\n // Being so tiny it is much more likely to be in-lined and this avoid the function call overhead\n function tokenStructuredMatcherNoCategories(token, tokType) {\n return token.tokenTypeIdx === tokType.tokenTypeIdx\n }\n let tokenShortNameIdx = 1\n const tokenIdxToClass = {}\n function augmentTokenTypes(tokenTypes) {\n // collect the parent Token Types as well.\n const tokenTypesAndParents = expandCategories(tokenTypes)\n // add required tokenType and categoryMatches properties\n assignTokenDefaultProps(tokenTypesAndParents)\n // fill up the categoryMatches\n assignCategoriesMapProp(tokenTypesAndParents)\n assignCategoriesTokensProp(tokenTypesAndParents)\n forEach(tokenTypesAndParents, (tokType) => {\n tokType.isParent = tokType.categoryMatches.length > 0\n })\n }\n function expandCategories(tokenTypes) {\n let result = clone(tokenTypes)\n let categories = tokenTypes\n let searching = true\n while (searching) {\n categories = compact(flatten(map(categories, (currTokType) => currTokType.CATEGORIES)))\n const newCategories = difference$1(categories, result)\n result = result.concat(newCategories)\n if (isEmpty(newCategories)) {\n searching = false\n } else {\n categories = newCategories\n }\n }\n return result\n }\n function assignTokenDefaultProps(tokenTypes) {\n forEach(tokenTypes, (currTokType) => {\n if (!hasShortKeyProperty(currTokType)) {\n tokenIdxToClass[tokenShortNameIdx] = currTokType\n currTokType.tokenTypeIdx = tokenShortNameIdx++\n }\n // CATEGORIES? : TokenType | TokenType[]\n if (\n hasCategoriesProperty(currTokType) &&\n !isArray$1(currTokType.CATEGORIES)\n // &&\n // !isUndefined(currTokType.CATEGORIES.PATTERN)\n ) {\n currTokType.CATEGORIES = [currTokType.CATEGORIES]\n }\n if (!hasCategoriesProperty(currTokType)) {\n currTokType.CATEGORIES = []\n }\n if (!hasExtendingTokensTypesProperty(currTokType)) {\n currTokType.categoryMatches = []\n }\n if (!hasExtendingTokensTypesMapProperty(currTokType)) {\n currTokType.categoryMatchesMap = {}\n }\n })\n }\n function assignCategoriesTokensProp(tokenTypes) {\n forEach(tokenTypes, (currTokType) => {\n // avoid duplications\n currTokType.categoryMatches = []\n forEach(currTokType.categoryMatchesMap, (val, key) => {\n currTokType.categoryMatches.push(tokenIdxToClass[key].tokenTypeIdx)\n })\n })\n }\n function assignCategoriesMapProp(tokenTypes) {\n forEach(tokenTypes, (currTokType) => {\n singleAssignCategoriesToksMap([], currTokType)\n })\n }\n function singleAssignCategoriesToksMap(path, nextNode) {\n forEach(path, (pathNode) => {\n nextNode.categoryMatchesMap[pathNode.tokenTypeIdx] = true\n })\n forEach(nextNode.CATEGORIES, (nextCategory) => {\n const newPath = path.concat(nextNode)\n // avoids infinite loops due to cyclic categories.\n if (!includes(newPath, nextCategory)) {\n singleAssignCategoriesToksMap(newPath, nextCategory)\n }\n })\n }\n function hasShortKeyProperty(tokType) {\n return has(tokType, 'tokenTypeIdx')\n }\n function hasCategoriesProperty(tokType) {\n return has(tokType, 'CATEGORIES')\n }\n function hasExtendingTokensTypesProperty(tokType) {\n return has(tokType, 'categoryMatches')\n }\n function hasExtendingTokensTypesMapProperty(tokType) {\n return has(tokType, 'categoryMatchesMap')\n }\n function isTokenType(tokType) {\n return has(tokType, 'tokenTypeIdx')\n }\n\n const defaultLexerErrorProvider = {\n buildUnableToPopLexerModeMessage(token) {\n return `Unable to pop Lexer Mode after encountering Token ->${token.image}<- The Mode Stack is empty`\n },\n buildUnexpectedCharactersMessage(fullText, startOffset, length, line, column) {\n return (\n `unexpected character: ->${fullText.charAt(startOffset)}<- at offset: ${startOffset},` +\n ` skipped ${length} characters.`\n )\n },\n }\n\n var LexerDefinitionErrorType\n ;(function (LexerDefinitionErrorType) {\n LexerDefinitionErrorType[(LexerDefinitionErrorType['MISSING_PATTERN'] = 0)] = 'MISSING_PATTERN'\n LexerDefinitionErrorType[(LexerDefinitionErrorType['INVALID_PATTERN'] = 1)] = 'INVALID_PATTERN'\n LexerDefinitionErrorType[(LexerDefinitionErrorType['EOI_ANCHOR_FOUND'] = 2)] = 'EOI_ANCHOR_FOUND'\n LexerDefinitionErrorType[(LexerDefinitionErrorType['UNSUPPORTED_FLAGS_FOUND'] = 3)] = 'UNSUPPORTED_FLAGS_FOUND'\n LexerDefinitionErrorType[(LexerDefinitionErrorType['DUPLICATE_PATTERNS_FOUND'] = 4)] = 'DUPLICATE_PATTERNS_FOUND'\n LexerDefinitionErrorType[(LexerDefinitionErrorType['INVALID_GROUP_TYPE_FOUND'] = 5)] = 'INVALID_GROUP_TYPE_FOUND'\n LexerDefinitionErrorType[(LexerDefinitionErrorType['PUSH_MODE_DOES_NOT_EXIST'] = 6)] = 'PUSH_MODE_DOES_NOT_EXIST'\n LexerDefinitionErrorType[(LexerDefinitionErrorType['MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE'] = 7)] =\n 'MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE'\n LexerDefinitionErrorType[(LexerDefinitionErrorType['MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY'] = 8)] =\n 'MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY'\n LexerDefinitionErrorType[(LexerDefinitionErrorType['MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST'] = 9)] =\n 'MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST'\n LexerDefinitionErrorType[(LexerDefinitionErrorType['LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED'] = 10)] =\n 'LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED'\n LexerDefinitionErrorType[(LexerDefinitionErrorType['SOI_ANCHOR_FOUND'] = 11)] = 'SOI_ANCHOR_FOUND'\n LexerDefinitionErrorType[(LexerDefinitionErrorType['EMPTY_MATCH_PATTERN'] = 12)] = 'EMPTY_MATCH_PATTERN'\n LexerDefinitionErrorType[(LexerDefinitionErrorType['NO_LINE_BREAKS_FLAGS'] = 13)] = 'NO_LINE_BREAKS_FLAGS'\n LexerDefinitionErrorType[(LexerDefinitionErrorType['UNREACHABLE_PATTERN'] = 14)] = 'UNREACHABLE_PATTERN'\n LexerDefinitionErrorType[(LexerDefinitionErrorType['IDENTIFY_TERMINATOR'] = 15)] = 'IDENTIFY_TERMINATOR'\n LexerDefinitionErrorType[(LexerDefinitionErrorType['CUSTOM_LINE_BREAK'] = 16)] = 'CUSTOM_LINE_BREAK'\n LexerDefinitionErrorType[(LexerDefinitionErrorType['MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE'] = 17)] =\n 'MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE'\n })(LexerDefinitionErrorType || (LexerDefinitionErrorType = {}))\n const DEFAULT_LEXER_CONFIG = {\n deferDefinitionErrorsHandling: false,\n positionTracking: 'full',\n lineTerminatorsPattern: /\\n|\\r\\n?/g,\n lineTerminatorCharacters: ['\\n', '\\r'],\n ensureOptimizations: false,\n safeMode: false,\n errorMessageProvider: defaultLexerErrorProvider,\n traceInitPerf: false,\n skipValidations: false,\n recoveryEnabled: true,\n }\n Object.freeze(DEFAULT_LEXER_CONFIG)\n class Lexer {\n constructor(lexerDefinition, config = DEFAULT_LEXER_CONFIG) {\n this.lexerDefinition = lexerDefinition\n this.lexerDefinitionErrors = []\n this.lexerDefinitionWarning = []\n this.patternIdxToConfig = {}\n this.charCodeToPatternIdxToConfig = {}\n this.modes = []\n this.emptyGroups = {}\n this.trackStartLines = true\n this.trackEndLines = true\n this.hasCustom = false\n this.canModeBeOptimized = {}\n // Duplicated from the parser's perf trace trait to allow future extraction\n // of the lexer to a separate package.\n this.TRACE_INIT = (phaseDesc, phaseImpl) => {\n // No need to optimize this using NOOP pattern because\n // It is not called in a hot spot...\n if (this.traceInitPerf === true) {\n this.traceInitIndent++\n const indent = new Array(this.traceInitIndent + 1).join('\\t')\n if (this.traceInitIndent < this.traceInitMaxIdent) {\n console.log(`${indent}--> <${phaseDesc}>`)\n }\n const { time, value } = timer(phaseImpl)\n /* istanbul ignore next - Difficult to reproduce specific performance behavior (>10ms) in tests */\n const traceMethod = time > 10 ? console.warn : console.log\n if (this.traceInitIndent < this.traceInitMaxIdent) {\n traceMethod(`${indent}<-- <${phaseDesc}> time: ${time}ms`)\n }\n this.traceInitIndent--\n return value\n } else {\n return phaseImpl()\n }\n }\n if (typeof config === 'boolean') {\n throw Error(\n 'The second argument to the Lexer constructor is now an ILexerConfig Object.\\n' +\n 'a boolean 2nd argument is no longer supported',\n )\n }\n // todo: defaults func?\n this.config = assign$1({}, DEFAULT_LEXER_CONFIG, config)\n const traceInitVal = this.config.traceInitPerf\n if (traceInitVal === true) {\n this.traceInitMaxIdent = Infinity\n this.traceInitPerf = true\n } else if (typeof traceInitVal === 'number') {\n this.traceInitMaxIdent = traceInitVal\n this.traceInitPerf = true\n }\n this.traceInitIndent = -1\n this.TRACE_INIT('Lexer Constructor', () => {\n let actualDefinition\n let hasOnlySingleMode = true\n this.TRACE_INIT('Lexer Config handling', () => {\n if (this.config.lineTerminatorsPattern === DEFAULT_LEXER_CONFIG.lineTerminatorsPattern) {\n // optimized built-in implementation for the defaults definition of lineTerminators\n this.config.lineTerminatorsPattern = LineTerminatorOptimizedTester\n } else {\n if (this.config.lineTerminatorCharacters === DEFAULT_LEXER_CONFIG.lineTerminatorCharacters) {\n throw Error(\n 'Error: Missing <lineTerminatorCharacters> property on the Lexer config.\\n' +\n '\\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS',\n )\n }\n }\n if (config.safeMode && config.ensureOptimizations) {\n throw Error('\"safeMode\" and \"ensureOptimizations\" flags are mutually exclusive.')\n }\n this.trackStartLines = /full|onlyStart/i.test(this.config.positionTracking)\n this.trackEndLines = /full/i.test(this.config.positionTracking)\n // Convert SingleModeLexerDefinition into a IMultiModeLexerDefinition.\n if (isArray$1(lexerDefinition)) {\n actualDefinition = {\n modes: { defaultMode: clone(lexerDefinition) },\n defaultMode: DEFAULT_MODE,\n }\n } else {\n // no conversion needed, input should already be a IMultiModeLexerDefinition\n hasOnlySingleMode = false\n actualDefinition = clone(lexerDefinition)\n }\n })\n if (this.config.skipValidations === false) {\n this.TRACE_INIT('performRuntimeChecks', () => {\n this.lexerDefinitionErrors = this.lexerDefinitionErrors.concat(\n performRuntimeChecks(actualDefinition, this.trackStartLines, this.config.lineTerminatorCharacters),\n )\n })\n this.TRACE_INIT('performWarningRuntimeChecks', () => {\n this.lexerDefinitionWarning = this.lexerDefinitionWarning.concat(\n performWarningRuntimeChecks(actualDefinition, this.trackStartLines, this.config.lineTerminatorCharacters),\n )\n })\n }\n // for extra robustness to avoid throwing an none informative error message\n actualDefinition.modes = actualDefinition.modes ? actualDefinition.modes : {}\n // an error of undefined TokenTypes will be detected in \"performRuntimeChecks\" above.\n // this transformation is to increase robustness in the case of partially invalid lexer definition.\n forEach(actualDefinition.modes, (currModeValue, currModeName) => {\n actualDefinition.modes[currModeName] = reject(currModeValue, (currTokType) => isUndefined(currTokType))\n })\n const allModeNames = keys(actualDefinition.modes)\n forEach(actualDefinition.modes, (currModDef, currModName) => {\n this.TRACE_INIT(`Mode: <${currModName}> processing`, () => {\n this.modes.push(currModName)\n if (this.config.skipValidations === false) {\n this.TRACE_INIT(`validatePatterns`, () => {\n this.lexerDefinitionErrors = this.lexerDefinitionErrors.concat(\n validatePatterns(currModDef, allModeNames),\n )\n })\n }\n // If definition errors were encountered, the analysis phase may fail unexpectedly/\n // Considering a lexer with definition errors may never be used, there is no point\n // to performing the analysis anyhow...\n if (isEmpty(this.lexerDefinitionErrors)) {\n augmentTokenTypes(currModDef)\n let currAnalyzeResult\n this.TRACE_INIT(`analyzeTokenTypes`, () => {\n currAnalyzeResult = analyzeTokenTypes(currModDef, {\n lineTerminatorCharacters: this.config.lineTerminatorCharacters,\n positionTracking: config.positionTracking,\n ensureOptimizations: config.ensureOptimizations,\n safeMode: config.safeMode,\n tracer: this.TRACE_INIT,\n })\n })\n this.patternIdxToConfig[currModName] = currAnalyzeResult.patternIdxToConfig\n this.charCodeToPatternIdxToConfig[currModName] = currAnalyzeResult.charCodeToPatternIdxToConfig\n this.emptyGroups = assign$1({}, this.emptyGroups, currAnalyzeResult.emptyGroups)\n this.hasCustom = currAnalyzeResult.hasCustom || this.hasCustom\n this.canModeBeOptimized[currModName] = currAnalyzeResult.canBeOptimized\n }\n })\n })\n this.defaultMode = actualDefinition.defaultMode\n if (!isEmpty(this.lexerDefinitionErrors) && !this.config.deferDefinitionErrorsHandling) {\n const allErrMessages = map(this.lexerDefinitionErrors, (error) => {\n return error.message\n })\n const allErrMessagesString = allErrMessages.join('-----------------------\\n')\n throw new Error('Errors detected in definition of Lexer:\\n' + allErrMessagesString)\n }\n // Only print warning if there are no errors, This will avoid pl\n forEach(this.lexerDefinitionWarning, (warningDescriptor) => {\n PRINT_WARNING(warningDescriptor.message)\n })\n this.TRACE_INIT('Choosing sub-methods implementations', () => {\n // Choose the relevant internal implementations for this specific parser.\n // These implementations should be in-lined by the JavaScript engine\n // to provide optimal performance in each scenario.\n if (SUPPORT_STICKY) {\n this.chopInput = identity\n this.match = this.matchWithTest\n } else {\n this.updateLastIndex = noop\n this.match = this.matchWithExec\n }\n if (hasOnlySingleMode) {\n this.handleModes = noop\n }\n if (this.trackStartLines === false) {\n this.computeNewColumn = identity\n }\n if (this.trackEndLines === false) {\n this.updateTokenEndLineColumnLocation = noop\n }\n if (/full/i.test(this.config.positionTracking)) {\n this.createTokenInstance = this.createFullToken\n } else if (/onlyStart/i.test(this.config.positionTracking)) {\n this.createTokenInstance = this.createStartOnlyToken\n } else if (/onlyOffset/i.test(this.config.positionTracking)) {\n this.createTokenInstance = this.createOffsetOnlyToken\n } else {\n throw Error(`Invalid <positionTracking> config option: \"${this.config.positionTracking}\"`)\n }\n if (this.hasCustom) {\n this.addToken = this.addTokenUsingPush\n this.handlePayload = this.handlePayloadWithCustom\n } else {\n this.addToken = this.addTokenUsingMemberAccess\n this.handlePayload = this.handlePayloadNoCustom\n }\n })\n this.TRACE_INIT('Failed Optimization Warnings', () => {\n const unOptimizedModes = reduce(\n this.canModeBeOptimized,\n (cannotBeOptimized, canBeOptimized, modeName) => {\n if (canBeOptimized === false) {\n cannotBeOptimized.push(modeName)\n }\n return cannotBeOptimized\n },\n [],\n )\n if (config.ensureOptimizations && !isEmpty(unOptimizedModes)) {\n throw Error(\n `Lexer Modes: < ${unOptimizedModes.join(', ')} > cannot be optimized.\\n` +\n '\\t Disable the \"ensureOptimizations\" lexer config flag to silently ignore this and run the lexer in an un-optimized mode.\\n' +\n '\\t Or inspect the console log for details on how to resolve these issues.',\n )\n }\n })\n this.TRACE_INIT('clearRegExpParserCache', () => {\n clearRegExpParserCache()\n })\n this.TRACE_INIT('toFastProperties', () => {\n toFastProperties(this)\n })\n })\n }\n tokenize(text, initialMode = this.defaultMode) {\n if (!isEmpty(this.lexerDefinitionErrors)) {\n const allErrMessages = map(this.lexerDefinitionErrors, (error) => {\n return error.message\n })\n const allErrMessagesString = allErrMessages.join('-----------------------\\n')\n throw new Error('Unable to Tokenize because Errors detected in definition of Lexer:\\n' + allErrMessagesString)\n }\n return this.tokenizeInternal(text, initialMode)\n }\n // There is quite a bit of duplication between this and \"tokenizeInternalLazy\"\n // This is intentional due to performance considerations.\n // this method also used quite a bit of `!` none null assertions because it is too optimized\n // for `tsc` to always understand it is \"safe\"\n tokenizeInternal(text, initialMode) {\n let i,\n j,\n k,\n matchAltImage,\n longerAlt,\n matchedImage,\n payload,\n altPayload,\n imageLength,\n group,\n tokType,\n newToken,\n errLength,\n msg,\n match\n const orgText = text\n const orgLength = orgText.length\n let offset = 0\n let matchedTokensIndex = 0\n // initializing the tokensArray to the \"guessed\" size.\n // guessing too little will still reduce the number of array re-sizes on pushes.\n // guessing too large (Tested by guessing x4 too large) may cost a bit more of memory\n // but would still have a faster runtime by avoiding (All but one) array resizing.\n const guessedNumberOfTokens = this.hasCustom\n ? 0 // will break custom token pattern APIs the matchedTokens array will contain undefined elements.\n : Math.floor(text.length / 10)\n const matchedTokens = new Array(guessedNumberOfTokens)\n const errors = []\n let line = this.trackStartLines ? 1 : undefined\n let column = this.trackStartLines ? 1 : undefined\n const groups = cloneEmptyGroups(this.emptyGroups)\n const trackLines = this.trackStartLines\n const lineTerminatorPattern = this.config.lineTerminatorsPattern\n let currModePatternsLength = 0\n let patternIdxToConfig = []\n let currCharCodeToPatternIdxToConfig = []\n const modeStack = []\n const emptyArray = []\n Object.freeze(emptyArray)\n let getPossiblePatterns\n function getPossiblePatternsSlow() {\n return patternIdxToConfig\n }\n function getPossiblePatternsOptimized(charCode) {\n const optimizedCharIdx = charCodeToOptimizedIndex(charCode)\n const possiblePatterns = currCharCodeToPatternIdxToConfig[optimizedCharIdx]\n if (possiblePatterns === undefined) {\n return emptyArray\n } else {\n return possiblePatterns\n }\n }\n const pop_mode = (popToken) => {\n // TODO: perhaps avoid this error in the edge case there is no more input?\n if (\n modeStack.length === 1 &&\n // if we have both a POP_MODE and a PUSH_MODE this is in-fact a \"transition\"\n // So no error should occur.\n popToken.tokenType.PUSH_MODE === undefined\n ) {\n // if we try to pop the last mode there lexer will no longer have ANY mode.\n // thus the pop is ignored, an error will be created and the lexer will continue parsing in the previous mode.\n const msg = this.config.errorMessageProvider.buildUnableToPopLexerModeMessage(popToken)\n errors.push({\n offset: popToken.startOffset,\n line: popToken.startLine,\n column: popToken.startColumn,\n length: popToken.image.length,\n message: msg,\n })\n } else {\n modeStack.pop()\n const newMode = last(modeStack)\n patternIdxToConfig = this.patternIdxToConfig[newMode]\n currCharCodeToPatternIdxToConfig = this.charCodeToPatternIdxToConfig[newMode]\n currModePatternsLength = patternIdxToConfig.length\n const modeCanBeOptimized = this.canModeBeOptimized[newMode] && this.config.safeMode === false\n if (currCharCodeToPatternIdxToConfig && modeCanBeOptimized) {\n getPossiblePatterns = getPossiblePatternsOptimized\n } else {\n getPossiblePatterns = getPossiblePatternsSlow\n }\n }\n }\n function push_mode(newMode) {\n modeStack.push(newMode)\n currCharCodeToPatternIdxToConfig = this.charCodeToPatternIdxToConfig[newMode]\n patternIdxToConfig = this.patternIdxToConfig[newMode]\n currModePatternsLength = patternIdxToConfig.length\n currModePatternsLength = patternIdxToConfig.length\n const modeCanBeOptimized = this.canModeBeOptimized[newMode] && this.config.safeMode === false\n if (currCharCodeToPatternIdxToConfig && modeCanBeOptimized) {\n getPossiblePatterns = getPossiblePatternsOptimized\n } else {\n getPossiblePatterns = getPossiblePatternsSlow\n }\n }\n // this pattern seems to avoid a V8 de-optimization, although that de-optimization does not\n // seem to matter performance wise.\n push_mode.call(this, initialMode)\n let currConfig\n const recoveryEnabled = this.config.recoveryEnabled\n while (offset < orgLength) {\n matchedImage = null\n const nextCharCode = orgText.charCodeAt(offset)\n const chosenPatternIdxToConfig = getPossiblePatterns(nextCharCode)\n const chosenPatternsLength = chosenPatternIdxToConfig.length\n for (i = 0; i < chosenPatternsLength; i++) {\n currConfig = chosenPatternIdxToConfig[i]\n const currPattern = currConfig.pattern\n payload = null\n // manually in-lined because > 600 chars won't be in-lined in V8\n const singleCharCode = currConfig.short\n if (singleCharCode !== false) {\n if (nextCharCode === singleCharCode) {\n // single character string\n matchedImage = currPattern\n }\n } else if (currConfig.isCustom === true) {\n match = currPattern.exec(orgText, offset, matchedTokens, groups)\n if (match !== null) {\n matchedImage = match[0]\n if (match.payload !== undefined) {\n payload = match.payload\n }\n } else {\n matchedImage = null\n }\n } else {\n this.updateLastIndex(currPattern, offset)\n matchedImage = this.match(currPattern, text, offset)\n }\n if (matchedImage !== null) {\n // even though this pattern matched we must try a another longer alternative.\n // this can be used to prioritize keywords over identifiers\n longerAlt = currConfig.longerAlt\n if (longerAlt !== undefined) {\n // TODO: micro optimize, avoid extra prop access\n // by saving/linking longerAlt on the original config?\n const longerAltLength = longerAlt.length\n for (k = 0; k < longerAltLength; k++) {\n const longerAltConfig = patternIdxToConfig[longerAlt[k]]\n const longerAltPattern = longerAltConfig.pattern\n altPayload = null\n // single Char can never be a longer alt so no need to test it.\n // manually in-lined because > 600 chars won't be in-lined in V8\n if (longerAltConfig.isCustom === true) {\n match = longerAltPattern.exec(orgText, offset, matchedTokens, groups)\n if (match !== null) {\n matchAltImage = match[0]\n if (match.payload !== undefined) {\n altPayload = match.payload\n }\n } else {\n matchAltImage = null\n }\n } else {\n this.updateLastIndex(longerAltPattern, offset)\n matchAltImage = this.match(longerAltPattern, text, offset)\n }\n if (matchAltImage && matchAltImage.length > matchedImage.length) {\n matchedImage = matchAltImage\n payload = altPayload\n currConfig = longerAltConfig\n // Exit the loop early after matching one of the longer alternatives\n // The first matched alternative takes precedence\n break\n }\n }\n }\n break\n }\n }\n // successful match\n if (matchedImage !== null) {\n imageLength = matchedImage.length\n group = currConfig.group\n if (group !== undefined) {\n tokType = currConfig.tokenTypeIdx\n // TODO: \"offset + imageLength\" and the new column may be computed twice in case of \"full\" location information inside\n // createFullToken method\n newToken = this.createTokenInstance(\n matchedImage,\n offset,\n tokType,\n currConfig.tokenType,\n line,\n column,\n imageLength,\n )\n this.handlePayload(newToken, payload)\n // TODO: optimize NOOP in case there are no special groups?\n if (group === false) {\n matchedTokensIndex = this.addToken(matchedTokens, matchedTokensIndex, newToken)\n } else {\n groups[group].push(newToken)\n }\n }\n text = this.chopInput(text, imageLength)\n offset = offset + imageLength\n // TODO: with newlines the column may be assigned twice\n column = this.computeNewColumn(column, imageLength)\n if (trackLines === true && currConfig.canLineTerminator === true) {\n let numOfLTsInMatch = 0\n let foundTerminator\n let lastLTEndOffset\n lineTerminatorPattern.lastIndex = 0\n do {\n foundTerminator = lineTerminatorPattern.test(matchedImage)\n if (foundTerminator === true) {\n lastLTEndOffset = lineTerminatorPattern.lastIndex - 1\n numOfLTsInMatch++\n }\n } while (foundTerminator === true)\n if (numOfLTsInMatch !== 0) {\n line = line + numOfLTsInMatch\n column = imageLength - lastLTEndOffset\n this.updateTokenEndLineColumnLocation(\n newToken,\n group,\n lastLTEndOffset,\n numOfLTsInMatch,\n line,\n column,\n imageLength,\n )\n }\n }\n // will be NOOP if no modes present\n this.handleModes(currConfig, pop_mode, push_mode, newToken)\n } else {\n // error recovery, drop characters until we identify a valid token's start point\n const errorStartOffset = offset\n const errorLine = line\n const errorColumn = column\n let foundResyncPoint = recoveryEnabled === false\n while (foundResyncPoint === false && offset < orgLength) {\n // Identity Func (when sticky flag is enabled)\n text = this.chopInput(text, 1)\n offset++\n for (j = 0; j < currModePatternsLength; j++) {\n const currConfig = patternIdxToConfig[j]\n const currPattern = currConfig.pattern\n // manually in-lined because > 600 chars won't be in-lined in V8\n const singleCharCode = currConfig.short\n if (singleCharCode !== false) {\n if (orgText.charCodeAt(offset) === singleCharCode) {\n // single character string\n foundResyncPoint = true\n }\n } else if (currConfig.isCustom === true) {\n foundResyncPoint = currPattern.exec(orgText, offset, matchedTokens, groups) !== null\n } else {\n this.updateLastIndex(currPattern, offset)\n foundResyncPoint = currPattern.exec(text) !== null\n }\n if (foundResyncPoint === true) {\n break\n }\n }\n }\n errLength = offset - errorStartOffset\n column = this.computeNewColumn(column, errLength)\n // at this point we either re-synced or reached the end of the input text\n msg = this.config.errorMessageProvider.buildUnexpectedCharactersMessage(\n orgText,\n errorStartOffset,\n errLength,\n errorLine,\n errorColumn,\n )\n errors.push({\n offset: errorStartOffset,\n line: errorLine,\n column: errorColumn,\n length: errLength,\n message: msg,\n })\n if (recoveryEnabled === false) {\n break\n }\n }\n }\n // if we do have custom patterns which push directly into the\n // TODO: custom tokens should not push directly??\n if (!this.hasCustom) {\n // if we guessed a too large size for the tokens array this will shrink it to the right size.\n matchedTokens.length = matchedTokensIndex\n }\n return {\n tokens: matchedTokens,\n groups: groups,\n errors: errors,\n }\n }\n handleModes(config, pop_mode, push_mode, newToken) {\n if (config.pop === true) {\n // need to save the PUSH_MODE property as if the mode is popped\n // patternIdxToPopMode is updated to reflect the new mode after popping the stack\n const pushMode = config.push\n pop_mode(newToken)\n if (pushMode !== undefined) {\n push_mode.call(this, pushMode)\n }\n } else if (config.push !== undefined) {\n push_mode.call(this, config.push)\n }\n }\n chopInput(text, length) {\n return text.substring(length)\n }\n updateLastIndex(regExp, newLastIndex) {\n regExp.lastIndex = newLastIndex\n }\n // TODO: decrease this under 600 characters? inspect stripping comments option in TSC compiler\n updateTokenEndLineColumnLocation(newToken, group, lastLTIdx, numOfLTsInMatch, line, column, imageLength) {\n let lastCharIsLT, fixForEndingInLT\n if (group !== undefined) {\n // a none skipped multi line Token, need to update endLine/endColumn\n lastCharIsLT = lastLTIdx === imageLength - 1\n fixForEndingInLT = lastCharIsLT ? -1 : 0\n if (!(numOfLTsInMatch === 1 && lastCharIsLT === true)) {\n // if a token ends in a LT that last LT only affects the line numbering of following Tokens\n newToken.endLine = line + fixForEndingInLT\n // the last LT in a token does not affect the endColumn either as the [columnStart ... columnEnd)\n // inclusive to exclusive range.\n newToken.endColumn = column - 1 + -fixForEndingInLT\n }\n // else single LT in the last character of a token, no need to modify the endLine/EndColumn\n }\n }\n computeNewColumn(oldColumn, imageLength) {\n return oldColumn + imageLength\n }\n createOffsetOnlyToken(image, startOffset, tokenTypeIdx, tokenType) {\n return {\n image,\n startOffset,\n tokenTypeIdx,\n tokenType,\n }\n }\n createStartOnlyToken(image, startOffset, tokenTypeIdx, tokenType, startLine, startColumn) {\n return {\n image,\n startOffset,\n startLine,\n startColumn,\n tokenTypeIdx,\n tokenType,\n }\n }\n createFullToken(image, startOffset, tokenTypeIdx, tokenType, startLine, startColumn, imageLength) {\n return {\n image,\n startOffset,\n endOffset: startOffset + imageLength - 1,\n startLine,\n endLine: startLine,\n startColumn,\n endColumn: startColumn + imageLength - 1,\n tokenTypeIdx,\n tokenType,\n }\n }\n addTokenUsingPush(tokenVector, index, tokenToAdd) {\n tokenVector.push(tokenToAdd)\n return index\n }\n addTokenUsingMemberAccess(tokenVector, index, tokenToAdd) {\n tokenVector[index] = tokenToAdd\n index++\n return index\n }\n handlePayloadNoCustom(token, payload) {}\n handlePayloadWithCustom(token, payload) {\n if (payload !== null) {\n token.payload = payload\n }\n }\n matchWithTest(pattern, text, offset) {\n const found = pattern.test(text)\n if (found === true) {\n return text.substring(offset, pattern.lastIndex)\n }\n return null\n }\n matchWithExec(pattern, text) {\n const regExpArray = pattern.exec(text)\n return regExpArray !== null ? regExpArray[0] : null\n }\n }\n Lexer.SKIPPED =\n 'This marks a skipped Token pattern, this means each token identified by it will' +\n 'be consumed and then thrown into oblivion, this can be used to for example to completely ignore whitespace.'\n Lexer.NA = /NOT_APPLICABLE/\n\n function tokenLabel(tokType) {\n if (hasTokenLabel(tokType)) {\n return tokType.LABEL\n } else {\n return tokType.name\n }\n }\n function hasTokenLabel(obj) {\n return isString(obj.LABEL) && obj.LABEL !== ''\n }\n const PARENT = 'parent'\n const CATEGORIES = 'categories'\n const LABEL = 'label'\n const GROUP = 'group'\n const PUSH_MODE = 'push_mode'\n const POP_MODE = 'pop_mode'\n const LONGER_ALT = 'longer_alt'\n const LINE_BREAKS = 'line_breaks'\n const START_CHARS_HINT = 'start_chars_hint'\n function createToken(config) {\n return createTokenInternal(config)\n }\n function createTokenInternal(config) {\n const pattern = config.pattern\n const tokenType = {}\n tokenType.name = config.name\n if (!isUndefined(pattern)) {\n tokenType.PATTERN = pattern\n }\n if (has(config, PARENT)) {\n throw (\n 'The parent property is no longer supported.\\n' +\n 'See: https://github.com/chevrotain/chevrotain/issues/564#issuecomment-349062346 for details.'\n )\n }\n if (has(config, CATEGORIES)) {\n // casting to ANY as this will be fixed inside `augmentTokenTypes``\n tokenType.CATEGORIES = config[CATEGORIES]\n }\n augmentTokenTypes([tokenType])\n if (has(config, LABEL)) {\n tokenType.LABEL = config[LABEL]\n }\n if (has(config, GROUP)) {\n tokenType.GROUP = config[GROUP]\n }\n if (has(config, POP_MODE)) {\n tokenType.POP_MODE = config[POP_MODE]\n }\n if (has(config, PUSH_MODE)) {\n tokenType.PUSH_MODE = config[PUSH_MODE]\n }\n if (has(config, LONGER_ALT)) {\n tokenType.LONGER_ALT = config[LONGER_ALT]\n }\n if (has(config, LINE_BREAKS)) {\n tokenType.LINE_BREAKS = config[LINE_BREAKS]\n }\n if (has(config, START_CHARS_HINT)) {\n tokenType.START_CHARS_HINT = config[START_CHARS_HINT]\n }\n return tokenType\n }\n const EOF = createToken({ name: 'EOF', pattern: Lexer.NA })\n augmentTokenTypes([EOF])\n function createTokenInstance(tokType, image, startOffset, endOffset, startLine, endLine, startColumn, endColumn) {\n return {\n image,\n startOffset,\n endOffset,\n startLine,\n endLine,\n startColumn,\n endColumn,\n tokenTypeIdx: tokType.tokenTypeIdx,\n tokenType: tokType,\n }\n }\n function tokenMatcher(token, tokType) {\n return tokenStructuredMatcher(token, tokType)\n }\n\n const defaultParserErrorProvider = {\n buildMismatchTokenMessage({ expected, actual, previous, ruleName }) {\n const hasLabel = hasTokenLabel(expected)\n const expectedMsg = hasLabel ? `--> ${tokenLabel(expected)} <--` : `token of type --> ${expected.name} <--`\n const msg = `Expecting ${expectedMsg} but found --> '${actual.image}' <--`\n return msg\n },\n buildNotAllInputParsedMessage({ firstRedundant, ruleName }) {\n return 'Redundant input, expecting EOF but found: ' + firstRedundant.image\n },\n buildNoViableAltMessage({ expectedPathsPerAlt, actual, previous, customUserDescription, ruleName }) {\n const errPrefix = 'Expecting: '\n // TODO: issue: No Viable Alternative Error may have incomplete details. #502\n const actualText = head(actual).image\n const errSuffix = \"\\nbut found: '\" + actualText + \"'\"\n if (customUserDescription) {\n return errPrefix + customUserDescription + errSuffix\n } else {\n const allLookAheadPaths = reduce(expectedPathsPerAlt, (result, currAltPaths) => result.concat(currAltPaths), [])\n const nextValidTokenSequences = map(\n allLookAheadPaths,\n (currPath) => `[${map(currPath, (currTokenType) => tokenLabel(currTokenType)).join(', ')}]`,\n )\n const nextValidSequenceItems = map(nextValidTokenSequences, (itemMsg, idx) => ` ${idx + 1}. ${itemMsg}`)\n const calculatedDescription = `one of these possible Token sequences:\\n${nextValidSequenceItems.join('\\n')}`\n return errPrefix + calculatedDescription + errSuffix\n }\n },\n buildEarlyExitMessage({ expectedIterationPaths, actual, customUserDescription, ruleName }) {\n const errPrefix = 'Expecting: '\n // TODO: issue: No Viable Alternative Error may have incomplete details. #502\n const actualText = head(actual).image\n const errSuffix = \"\\nbut found: '\" + actualText + \"'\"\n if (customUserDescription) {\n return errPrefix + customUserDescription + errSuffix\n } else {\n const nextValidTokenSequences = map(\n expectedIterationPaths,\n (currPath) => `[${map(currPath, (currTokenType) => tokenLabel(currTokenType)).join(',')}]`,\n )\n const calculatedDescription =\n `expecting at least one iteration which starts with one of these possible Token sequences::\\n ` +\n `<${nextValidTokenSequences.join(' ,')}>`\n return errPrefix + calculatedDescription + errSuffix\n }\n },\n }\n Object.freeze(defaultParserErrorProvider)\n const defaultGrammarResolverErrorProvider = {\n buildRuleNotFoundError(topLevelRule, undefinedRule) {\n const msg =\n 'Invalid grammar, reference to a rule which is not defined: ->' +\n undefinedRule.nonTerminalName +\n '<-\\n' +\n 'inside top level rule: ->' +\n topLevelRule.name +\n '<-'\n return msg\n },\n }\n const defaultGrammarValidatorErrorProvider = {\n buildDuplicateFoundError(topLevelRule, duplicateProds) {\n function getExtraProductionArgument(prod) {\n if (prod instanceof Terminal) {\n return prod.terminalType.name\n } else if (prod instanceof NonTerminal) {\n return prod.nonTerminalName\n } else {\n return ''\n }\n }\n const topLevelName = topLevelRule.name\n const duplicateProd = head(duplicateProds)\n const index = duplicateProd.idx\n const dslName = getProductionDslName(duplicateProd)\n const extraArgument = getExtraProductionArgument(duplicateProd)\n const hasExplicitIndex = index > 0\n let msg = `->${dslName}${hasExplicitIndex ? index : ''}<- ${\n extraArgument ? `with argument: ->${extraArgument}<-` : ''\n }\n appears more than once (${\n duplicateProds.length\n } times) in the top level rule: ->${topLevelName}<-. \n For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES \n `\n // white space trimming time! better to trim afterwards as it allows to use WELL formatted multi line template strings...\n msg = msg.replace(/[ \\t]+/g, ' ')\n msg = msg.replace(/\\s\\s+/g, '\\n')\n return msg\n },\n buildNamespaceConflictError(rule) {\n const errMsg =\n `Namespace conflict found in grammar.\\n` +\n `The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <${rule.name}>.\\n` +\n `To resolve this make sure each Terminal and Non-Terminal names are unique\\n` +\n `This is easy to accomplish by using the convention that Terminal names start with an uppercase letter\\n` +\n `and Non-Terminal names start with a lower case letter.`\n return errMsg\n },\n buildAlternationPrefixAmbiguityError(options) {\n const pathMsg = map(options.prefixPath, (currTok) => tokenLabel(currTok)).join(', ')\n const occurrence = options.alternation.idx === 0 ? '' : options.alternation.idx\n const errMsg =\n `Ambiguous alternatives: <${options.ambiguityIndices.join(' ,')}> due to common lookahead prefix\\n` +\n `in <OR${occurrence}> inside <${options.topLevelRule.name}> Rule,\\n` +\n `<${pathMsg}> may appears as a prefix path in all these alternatives.\\n` +\n `See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX\\n` +\n `For Further details.`\n return errMsg\n },\n buildAlternationAmbiguityError(options) {\n const pathMsg = map(options.prefixPath, (currtok) => tokenLabel(currtok)).join(', ')\n const occurrence = options.alternation.idx === 0 ? '' : options.alternation.idx\n let currMessage =\n `Ambiguous Alternatives Detected: <${options.ambiguityIndices.join(' ,')}> in <OR${occurrence}>` +\n ` inside <${options.topLevelRule.name}> Rule,\\n` +\n `<${pathMsg}> may appears as a prefix path in all these alternatives.\\n`\n currMessage =\n currMessage +\n `See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES\\n` +\n `For Further details.`\n return currMessage\n },\n buildEmptyRepetitionError(options) {\n let dslName = getProductionDslName(options.repetition)\n if (options.repetition.idx !== 0) {\n dslName += options.repetition.idx\n }\n const errMsg =\n `The repetition <${dslName}> within Rule <${options.topLevelRule.name}> can never consume any tokens.\\n` +\n `This could lead to an infinite loop.`\n return errMsg\n },\n // TODO: remove - `errors_public` from nyc.config.js exclude\n // once this method is fully removed from this file\n buildTokenNameError(options) {\n /* istanbul ignore next */\n return 'deprecated'\n },\n buildEmptyAlternationError(options) {\n const errMsg =\n `Ambiguous empty alternative: <${options.emptyChoiceIdx + 1}>` +\n ` in <OR${options.alternation.idx}> inside <${options.topLevelRule.name}> Rule.\\n` +\n `Only the last alternative may be an empty alternative.`\n return errMsg\n },\n buildTooManyAlternativesError(options) {\n const errMsg =\n `An Alternation cannot have more than 256 alternatives:\\n` +\n `<OR${options.alternation.idx}> inside <${options.topLevelRule.name}> Rule.\\n has ${\n options.alternation.definition.length + 1\n } alternatives.`\n return errMsg\n },\n buildLeftRecursionError(options) {\n const ruleName = options.topLevelRule.name\n const pathNames = map(options.leftRecursionPath, (currRule) => currRule.name)\n const leftRecursivePath = `${ruleName} --> ${pathNames.concat([ruleName]).join(' --> ')}`\n const errMsg =\n `Left Recursion found in grammar.\\n` +\n `rule: <${ruleName}> can be invoked from itself (directly or indirectly)\\n` +\n `without consuming any Tokens. The grammar path that causes this is: \\n ${leftRecursivePath}\\n` +\n ` To fix this refactor your grammar to remove the left recursion.\\n` +\n `see: https://en.wikipedia.org/wiki/LL_parser#Left_factoring.`\n return errMsg\n },\n // TODO: remove - `errors_public` from nyc.config.js exclude\n // once this method is fully removed from this file\n buildInvalidRuleNameError(options) {\n /* istanbul ignore next */\n return 'deprecated'\n },\n buildDuplicateRuleNameError(options) {\n let ruleName\n if (options.topLevelRule instanceof Rule) {\n ruleName = options.topLevelRule.name\n } else {\n ruleName = options.topLevelRule\n }\n const errMsg = `Duplicate definition, rule: ->${ruleName}<- is already defined in the grammar: ->${options.grammarName}<-`\n return errMsg\n },\n }\n\n function resolveGrammar$1(topLevels, errMsgProvider) {\n const refResolver = new GastRefResolverVisitor(topLevels, errMsgProvider)\n refResolver.resolveRefs()\n return refResolver.errors\n }\n class GastRefResolverVisitor extends GAstVisitor {\n constructor(nameToTopRule, errMsgProvider) {\n super()\n this.nameToTopRule = nameToTopRule\n this.errMsgProvider = errMsgProvider\n this.errors = []\n }\n resolveRefs() {\n forEach(values(this.nameToTopRule), (prod) => {\n this.currTopLevel = prod\n prod.accept(this)\n })\n }\n visitNonTerminal(node) {\n const ref = this.nameToTopRule[node.nonTerminalName]\n if (!ref) {\n const msg = this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel, node)\n this.errors.push({\n message: msg,\n type: ParserDefinitionErrorType.UNRESOLVED_SUBRULE_REF,\n ruleName: this.currTopLevel.name,\n unresolvedRefName: node.nonTerminalName,\n })\n } else {\n node.referencedRule = ref\n }\n }\n }\n\n class AbstractNextPossibleTokensWalker extends RestWalker {\n constructor(topProd, path) {\n super()\n this.topProd = topProd\n this.path = path\n this.possibleTokTypes = []\n this.nextProductionName = ''\n this.nextProductionOccurrence = 0\n this.found = false\n this.isAtEndOfPath = false\n }\n startWalking() {\n this.found = false\n if (this.path.ruleStack[0] !== this.topProd.name) {\n throw Error(\"The path does not start with the walker's top Rule!\")\n }\n // immutable for the win\n this.ruleStack = clone(this.path.ruleStack).reverse() // intelij bug requires assertion\n this.occurrenceStack = clone(this.path.occurrenceStack).reverse() // intelij bug requires assertion\n // already verified that the first production is valid, we now seek the 2nd production\n this.ruleStack.pop()\n this.occurrenceStack.pop()\n this.updateExpectedNext()\n this.walk(this.topProd)\n return this.possibleTokTypes\n }\n walk(prod, prevRest = []) {\n // stop scanning once we found the path\n if (!this.found) {\n super.walk(prod, prevRest)\n }\n }\n walkProdRef(refProd, currRest, prevRest) {\n // found the next production, need to keep walking in it\n if (refProd.referencedRule.name === this.nextProductionName && refProd.idx === this.nextProductionOccurrence) {\n const fullRest = currRest.concat(prevRest)\n this.updateExpectedNext()\n this.walk(refProd.referencedRule, fullRest)\n }\n }\n updateExpectedNext() {\n // need to consume the Terminal\n if (isEmpty(this.ruleStack)) {\n // must reset nextProductionXXX to avoid walking down another Top Level production while what we are\n // really seeking is the last Terminal...\n this.nextProductionName = ''\n this.nextProductionOccurrence = 0\n this.isAtEndOfPath = true\n } else {\n this.nextProductionName = this.ruleStack.pop()\n this.nextProductionOccurrence = this.occurrenceStack.pop()\n }\n }\n }\n class NextAfterTokenWalker extends AbstractNextPossibleTokensWalker {\n constructor(topProd, path) {\n super(topProd, path)\n this.path = path\n this.nextTerminalName = ''\n this.nextTerminalOccurrence = 0\n this.nextTerminalName = this.path.lastTok.name\n this.nextTerminalOccurrence = this.path.lastTokOccurrence\n }\n walkTerminal(terminal, currRest, prevRest) {\n if (\n this.isAtEndOfPath &&\n terminal.terminalType.name === this.nextTerminalName &&\n terminal.idx === this.nextTerminalOccurrence &&\n !this.found\n ) {\n const fullRest = currRest.concat(prevRest)\n const restProd = new Alternative({ definition: fullRest })\n this.possibleTokTypes = first(restProd)\n this.found = true\n }\n }\n }\n /**\n * This walker only \"walks\" a single \"TOP\" level in the Grammar Ast, this means\n * it never \"follows\" production refs\n */\n class AbstractNextTerminalAfterProductionWalker extends RestWalker {\n constructor(topRule, occurrence) {\n super()\n this.topRule = topRule\n this.occurrence = occurrence\n this.result = {\n token: undefined,\n occurrence: undefined,\n isEndOfRule: undefined,\n }\n }\n startWalking() {\n this.walk(this.topRule)\n return this.result\n }\n }\n class NextTerminalAfterManyWalker extends AbstractNextTerminalAfterProductionWalker {\n walkMany(manyProd, currRest, prevRest) {\n if (manyProd.idx === this.occurrence) {\n const firstAfterMany = head(currRest.concat(prevRest))\n this.result.isEndOfRule = firstAfterMany === undefined\n if (firstAfterMany instanceof Terminal) {\n this.result.token = firstAfterMany.terminalType\n this.result.occurrence = firstAfterMany.idx\n }\n } else {\n super.walkMany(manyProd, currRest, prevRest)\n }\n }\n }\n class NextTerminalAfterManySepWalker extends AbstractNextTerminalAfterProductionWalker {\n walkManySep(manySepProd, currRest, prevRest) {\n if (manySepProd.idx === this.occurrence) {\n const firstAfterManySep = head(currRest.concat(prevRest))\n this.result.isEndOfRule = firstAfterManySep === undefined\n if (firstAfterManySep instanceof Terminal) {\n this.result.token = firstAfterManySep.terminalType\n this.result.occurrence = firstAfterManySep.idx\n }\n } else {\n super.walkManySep(manySepProd, currRest, prevRest)\n }\n }\n }\n class NextTerminalAfterAtLeastOneWalker extends AbstractNextTerminalAfterProductionWalker {\n walkAtLeastOne(atLeastOneProd, currRest, prevRest) {\n if (atLeastOneProd.idx === this.occurrence) {\n const firstAfterAtLeastOne = head(currRest.concat(prevRest))\n this.result.isEndOfRule = firstAfterAtLeastOne === undefined\n if (firstAfterAtLeastOne instanceof Terminal) {\n this.result.token = firstAfterAtLeastOne.terminalType\n this.result.occurrence = firstAfterAtLeastOne.idx\n }\n } else {\n super.walkAtLeastOne(atLeastOneProd, currRest, prevRest)\n }\n }\n }\n // TODO: reduce code duplication in the AfterWalkers\n class NextTerminalAfterAtLeastOneSepWalker extends AbstractNextTerminalAfterProductionWalker {\n walkAtLeastOneSep(atleastOneSepProd, currRest, prevRest) {\n if (atleastOneSepProd.idx === this.occurrence) {\n const firstAfterfirstAfterAtLeastOneSep = head(currRest.concat(prevRest))\n this.result.isEndOfRule = firstAfterfirstAfterAtLeastOneSep === undefined\n if (firstAfterfirstAfterAtLeastOneSep instanceof Terminal) {\n this.result.token = firstAfterfirstAfterAtLeastOneSep.terminalType\n this.result.occurrence = firstAfterfirstAfterAtLeastOneSep.idx\n }\n } else {\n super.walkAtLeastOneSep(atleastOneSepProd, currRest, prevRest)\n }\n }\n }\n function possiblePathsFrom(targetDef, maxLength, currPath = []) {\n // avoid side effects\n currPath = clone(currPath)\n let result = []\n let i = 0\n // TODO: avoid inner funcs\n function remainingPathWith(nextDef) {\n return nextDef.concat(drop(targetDef, i + 1))\n }\n // TODO: avoid inner funcs\n function getAlternativesForProd(definition) {\n const alternatives = possiblePathsFrom(remainingPathWith(definition), maxLength, currPath)\n return result.concat(alternatives)\n }\n /**\n * Mandatory productions will halt the loop as the paths computed from their recursive calls will already contain the\n * following (rest) of the targetDef.\n *\n * For optional productions (Option/Repetition/...) the loop will continue to represent the paths that do not include the\n * the optional production.\n */\n while (currPath.length < maxLength && i < targetDef.length) {\n const prod = targetDef[i]\n /* istanbul ignore else */\n if (prod instanceof Alternative) {\n return getAlternativesForProd(prod.definition)\n } else if (prod instanceof NonTerminal) {\n return getAlternativesForProd(prod.definition)\n } else if (prod instanceof Option) {\n result = getAlternativesForProd(prod.definition)\n } else if (prod instanceof RepetitionMandatory) {\n const newDef = prod.definition.concat([\n new Repetition({\n definition: prod.definition,\n }),\n ])\n return getAlternativesForProd(newDef)\n } else if (prod instanceof RepetitionMandatoryWithSeparator) {\n const newDef = [\n new Alternative({ definition: prod.definition }),\n new Repetition({\n definition: [new Terminal({ terminalType: prod.separator })].concat(prod.definition),\n }),\n ]\n return getAlternativesForProd(newDef)\n } else if (prod instanceof RepetitionWithSeparator) {\n const newDef = prod.definition.concat([\n new Repetition({\n definition: [new Terminal({ terminalType: prod.separator })].concat(prod.definition),\n }),\n ])\n result = getAlternativesForProd(newDef)\n } else if (prod instanceof Repetition) {\n const newDef = prod.definition.concat([\n new Repetition({\n definition: prod.definition,\n }),\n ])\n result = getAlternativesForProd(newDef)\n } else if (prod instanceof Alternation) {\n forEach(prod.definition, (currAlt) => {\n // TODO: this is a limited check for empty alternatives\n // It would prevent a common case of infinite loops during parser initialization.\n // However **in-directly** empty alternatives may still cause issues.\n if (isEmpty(currAlt.definition) === false) {\n result = getAlternativesForProd(currAlt.definition)\n }\n })\n return result\n } else if (prod instanceof Terminal) {\n currPath.push(prod.terminalType)\n } else {\n throw Error('non exhaustive match')\n }\n i++\n }\n result.push({\n partialPath: currPath,\n suffixDef: drop(targetDef, i),\n })\n return result\n }\n function nextPossibleTokensAfter(initialDef, tokenVector, tokMatcher, maxLookAhead) {\n const EXIT_NON_TERMINAL = 'EXIT_NONE_TERMINAL'\n // to avoid creating a new Array each time.\n const EXIT_NON_TERMINAL_ARR = [EXIT_NON_TERMINAL]\n const EXIT_ALTERNATIVE = 'EXIT_ALTERNATIVE'\n let foundCompletePath = false\n const tokenVectorLength = tokenVector.length\n const minimalAlternativesIndex = tokenVectorLength - maxLookAhead - 1\n const result = []\n const possiblePaths = []\n possiblePaths.push({\n idx: -1,\n def: initialDef,\n ruleStack: [],\n occurrenceStack: [],\n })\n while (!isEmpty(possiblePaths)) {\n const currPath = possiblePaths.pop()\n // skip alternatives if no more results can be found (assuming deterministic grammar with fixed lookahead)\n if (currPath === EXIT_ALTERNATIVE) {\n if (foundCompletePath && last(possiblePaths).idx <= minimalAlternativesIndex) {\n // remove irrelevant alternative\n possiblePaths.pop()\n }\n continue\n }\n const currDef = currPath.def\n const currIdx = currPath.idx\n const currRuleStack = currPath.ruleStack\n const currOccurrenceStack = currPath.occurrenceStack\n // For Example: an empty path could exist in a valid grammar in the case of an EMPTY_ALT\n if (isEmpty(currDef)) {\n continue\n }\n const prod = currDef[0]\n /* istanbul ignore else */\n if (prod === EXIT_NON_TERMINAL) {\n const nextPath = {\n idx: currIdx,\n def: drop(currDef),\n ruleStack: dropRight(currRuleStack),\n occurrenceStack: dropRight(currOccurrenceStack),\n }\n possiblePaths.push(nextPath)\n } else if (prod instanceof Terminal) {\n /* istanbul ignore else */\n if (currIdx < tokenVectorLength - 1) {\n const nextIdx = currIdx + 1\n const actualToken = tokenVector[nextIdx]\n if (tokMatcher(actualToken, prod.terminalType)) {\n const nextPath = {\n idx: nextIdx,\n def: drop(currDef),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack,\n }\n possiblePaths.push(nextPath)\n }\n // end of the line\n } else if (currIdx === tokenVectorLength - 1) {\n // IGNORE ABOVE ELSE\n result.push({\n nextTokenType: prod.terminalType,\n nextTokenOccurrence: prod.idx,\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack,\n })\n foundCompletePath = true\n } else {\n throw Error('non exhaustive match')\n }\n } else if (prod instanceof NonTerminal) {\n const newRuleStack = clone(currRuleStack)\n newRuleStack.push(prod.nonTerminalName)\n const newOccurrenceStack = clone(currOccurrenceStack)\n newOccurrenceStack.push(prod.idx)\n const nextPath = {\n idx: currIdx,\n def: prod.definition.concat(EXIT_NON_TERMINAL_ARR, drop(currDef)),\n ruleStack: newRuleStack,\n occurrenceStack: newOccurrenceStack,\n }\n possiblePaths.push(nextPath)\n } else if (prod instanceof Option) {\n // the order of alternatives is meaningful, FILO (Last path will be traversed first).\n const nextPathWithout = {\n idx: currIdx,\n def: drop(currDef),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack,\n }\n possiblePaths.push(nextPathWithout)\n // required marker to avoid backtracking paths whose higher priority alternatives already matched\n possiblePaths.push(EXIT_ALTERNATIVE)\n const nextPathWith = {\n idx: currIdx,\n def: prod.definition.concat(drop(currDef)),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack,\n }\n possiblePaths.push(nextPathWith)\n } else if (prod instanceof RepetitionMandatory) {\n // TODO:(THE NEW operators here take a while...) (convert once?)\n const secondIteration = new Repetition({\n definition: prod.definition,\n idx: prod.idx,\n })\n const nextDef = prod.definition.concat([secondIteration], drop(currDef))\n const nextPath = {\n idx: currIdx,\n def: nextDef,\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack,\n }\n possiblePaths.push(nextPath)\n } else if (prod instanceof RepetitionMandatoryWithSeparator) {\n // TODO:(THE NEW operators here take a while...) (convert once?)\n const separatorGast = new Terminal({\n terminalType: prod.separator,\n })\n const secondIteration = new Repetition({\n definition: [separatorGast].concat(prod.definition),\n idx: prod.idx,\n })\n const nextDef = prod.definition.concat([secondIteration], drop(currDef))\n const nextPath = {\n idx: currIdx,\n def: nextDef,\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack,\n }\n possiblePaths.push(nextPath)\n } else if (prod instanceof RepetitionWithSeparator) {\n // the order of alternatives is meaningful, FILO (Last path will be traversed first).\n const nextPathWithout = {\n idx: currIdx,\n def: drop(currDef),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack,\n }\n possiblePaths.push(nextPathWithout)\n // required marker to avoid backtracking paths whose higher priority alternatives already matched\n possiblePaths.push(EXIT_ALTERNATIVE)\n const separatorGast = new Terminal({\n terminalType: prod.separator,\n })\n const nthRepetition = new Repetition({\n definition: [separatorGast].concat(prod.definition),\n idx: prod.idx,\n })\n const nextDef = prod.definition.concat([nthRepetition], drop(currDef))\n const nextPathWith = {\n idx: currIdx,\n def: nextDef,\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack,\n }\n possiblePaths.push(nextPathWith)\n } else if (prod instanceof Repetition) {\n // the order of alternatives is meaningful, FILO (Last path will be traversed first).\n const nextPathWithout = {\n idx: currIdx,\n def: drop(currDef),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack,\n }\n possiblePaths.push(nextPathWithout)\n // required marker to avoid backtracking paths whose higher priority alternatives already matched\n possiblePaths.push(EXIT_ALTERNATIVE)\n // TODO: an empty repetition will cause infinite loops here, will the parser detect this in selfAnalysis?\n const nthRepetition = new Repetition({\n definition: prod.definition,\n idx: prod.idx,\n })\n const nextDef = prod.definition.concat([nthRepetition], drop(currDef))\n const nextPathWith = {\n idx: currIdx,\n def: nextDef,\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack,\n }\n possiblePaths.push(nextPathWith)\n } else if (prod instanceof Alternation) {\n // the order of alternatives is meaningful, FILO (Last path will be traversed first).\n for (let i = prod.definition.length - 1; i >= 0; i--) {\n const currAlt = prod.definition[i]\n const currAltPath = {\n idx: currIdx,\n def: currAlt.definition.concat(drop(currDef)),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack,\n }\n possiblePaths.push(currAltPath)\n possiblePaths.push(EXIT_ALTERNATIVE)\n }\n } else if (prod instanceof Alternative) {\n possiblePaths.push({\n idx: currIdx,\n def: prod.definition.concat(drop(currDef)),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack,\n })\n } else if (prod instanceof Rule) {\n // last because we should only encounter at most a single one of these per invocation.\n possiblePaths.push(expandTopLevelRule(prod, currIdx, currRuleStack, currOccurrenceStack))\n } else {\n throw Error('non exhaustive match')\n }\n }\n return result\n }\n function expandTopLevelRule(topRule, currIdx, currRuleStack, currOccurrenceStack) {\n const newRuleStack = clone(currRuleStack)\n newRuleStack.push(topRule.name)\n const newCurrOccurrenceStack = clone(currOccurrenceStack)\n // top rule is always assumed to have been called with occurrence index 1\n newCurrOccurrenceStack.push(1)\n return {\n idx: currIdx,\n def: topRule.definition,\n ruleStack: newRuleStack,\n occurrenceStack: newCurrOccurrenceStack,\n }\n }\n\n var PROD_TYPE\n ;(function (PROD_TYPE) {\n PROD_TYPE[(PROD_TYPE['OPTION'] = 0)] = 'OPTION'\n PROD_TYPE[(PROD_TYPE['REPETITION'] = 1)] = 'REPETITION'\n PROD_TYPE[(PROD_TYPE['REPETITION_MANDATORY'] = 2)] = 'REPETITION_MANDATORY'\n PROD_TYPE[(PROD_TYPE['REPETITION_MANDATORY_WITH_SEPARATOR'] = 3)] = 'REPETITION_MANDATORY_WITH_SEPARATOR'\n PROD_TYPE[(PROD_TYPE['REPETITION_WITH_SEPARATOR'] = 4)] = 'REPETITION_WITH_SEPARATOR'\n PROD_TYPE[(PROD_TYPE['ALTERNATION'] = 5)] = 'ALTERNATION'\n })(PROD_TYPE || (PROD_TYPE = {}))\n function getProdType(prod) {\n /* istanbul ignore else */\n if (prod instanceof Option || prod === 'Option') {\n return PROD_TYPE.OPTION\n } else if (prod instanceof Repetition || prod === 'Repetition') {\n return PROD_TYPE.REPETITION\n } else if (prod instanceof RepetitionMandatory || prod === 'RepetitionMandatory') {\n return PROD_TYPE.REPETITION_MANDATORY\n } else if (prod instanceof RepetitionMandatoryWithSeparator || prod === 'RepetitionMandatoryWithSeparator') {\n return PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR\n } else if (prod instanceof RepetitionWithSeparator || prod === 'RepetitionWithSeparator') {\n return PROD_TYPE.REPETITION_WITH_SEPARATOR\n } else if (prod instanceof Alternation || prod === 'Alternation') {\n return PROD_TYPE.ALTERNATION\n } else {\n throw Error('non exhaustive match')\n }\n }\n function buildLookaheadFuncForOr(\n occurrence,\n ruleGrammar,\n maxLookahead,\n hasPredicates,\n dynamicTokensEnabled,\n laFuncBuilder,\n ) {\n const lookAheadPaths = getLookaheadPathsForOr(occurrence, ruleGrammar, maxLookahead)\n const tokenMatcher = areTokenCategoriesNotUsed(lookAheadPaths)\n ? tokenStructuredMatcherNoCategories\n : tokenStructuredMatcher\n return laFuncBuilder(lookAheadPaths, hasPredicates, tokenMatcher, dynamicTokensEnabled)\n }\n /**\n * When dealing with an Optional production (OPTION/MANY/2nd iteration of AT_LEAST_ONE/...) we need to compare\n * the lookahead \"inside\" the production and the lookahead immediately \"after\" it in the same top level rule (context free).\n *\n * Example: given a production:\n * ABC(DE)?DF\n *\n * The optional '(DE)?' should only be entered if we see 'DE'. a single Token 'D' is not sufficient to distinguish between the two\n * alternatives.\n *\n * @returns A Lookahead function which will return true IFF the parser should parse the Optional production.\n */\n function buildLookaheadFuncForOptionalProd(\n occurrence,\n ruleGrammar,\n k,\n dynamicTokensEnabled,\n prodType,\n lookaheadBuilder,\n ) {\n const lookAheadPaths = getLookaheadPathsForOptionalProd(occurrence, ruleGrammar, prodType, k)\n const tokenMatcher = areTokenCategoriesNotUsed(lookAheadPaths)\n ? tokenStructuredMatcherNoCategories\n : tokenStructuredMatcher\n return lookaheadBuilder(lookAheadPaths[0], tokenMatcher, dynamicTokensEnabled)\n }\n function buildAlternativesLookAheadFunc(alts, hasPredicates, tokenMatcher, dynamicTokensEnabled) {\n const numOfAlts = alts.length\n const areAllOneTokenLookahead = every(alts, (currAlt) => {\n return every(currAlt, (currPath) => {\n return currPath.length === 1\n })\n })\n // This version takes into account the predicates as well.\n if (hasPredicates) {\n /**\n * @returns {number} - The chosen alternative index\n */\n return function (orAlts) {\n // unfortunately the predicates must be extracted every single time\n // as they cannot be cached due to references to parameters(vars) which are no longer valid.\n // note that in the common case of no predicates, no cpu time will be wasted on this (see else block)\n const predicates = map(orAlts, (currAlt) => currAlt.GATE)\n for (let t = 0; t < numOfAlts; t++) {\n const currAlt = alts[t]\n const currNumOfPaths = currAlt.length\n const currPredicate = predicates[t]\n if (currPredicate !== undefined && currPredicate.call(this) === false) {\n // if the predicate does not match there is no point in checking the paths\n continue\n }\n nextPath: for (let j = 0; j < currNumOfPaths; j++) {\n const currPath = currAlt[j]\n const currPathLength = currPath.length\n for (let i = 0; i < currPathLength; i++) {\n const nextToken = this.LA(i + 1)\n if (tokenMatcher(nextToken, currPath[i]) === false) {\n // mismatch in current path\n // try the next pth\n continue nextPath\n }\n }\n // found a full path that matches.\n // this will also work for an empty ALT as the loop will be skipped\n return t\n }\n // none of the paths for the current alternative matched\n // try the next alternative\n }\n // none of the alternatives could be matched\n return undefined\n }\n } else if (areAllOneTokenLookahead && !dynamicTokensEnabled) {\n // optimized (common) case of all the lookaheads paths requiring only\n // a single token lookahead. These Optimizations cannot work if dynamically defined Tokens are used.\n const singleTokenAlts = map(alts, (currAlt) => {\n return flatten(currAlt)\n })\n const choiceToAlt = reduce(\n singleTokenAlts,\n (result, currAlt, idx) => {\n forEach(currAlt, (currTokType) => {\n if (!has(result, currTokType.tokenTypeIdx)) {\n result[currTokType.tokenTypeIdx] = idx\n }\n forEach(currTokType.categoryMatches, (currExtendingType) => {\n if (!has(result, currExtendingType)) {\n result[currExtendingType] = idx\n }\n })\n })\n return result\n },\n {},\n )\n /**\n * @returns {number} - The chosen alternative index\n */\n return function () {\n const nextToken = this.LA(1)\n return choiceToAlt[nextToken.tokenTypeIdx]\n }\n } else {\n // optimized lookahead without needing to check the predicates at all.\n // this causes code duplication which is intentional to improve performance.\n /**\n * @returns {number} - The chosen alternative index\n */\n return function () {\n for (let t = 0; t < numOfAlts; t++) {\n const currAlt = alts[t]\n const currNumOfPaths = currAlt.length\n nextPath: for (let j = 0; j < currNumOfPaths; j++) {\n const currPath = currAlt[j]\n const currPathLength = currPath.length\n for (let i = 0; i < currPathLength; i++) {\n const nextToken = this.LA(i + 1)\n if (tokenMatcher(nextToken, currPath[i]) === false) {\n // mismatch in current path\n // try the next pth\n continue nextPath\n }\n }\n // found a full path that matches.\n // this will also work for an empty ALT as the loop will be skipped\n return t\n }\n // none of the paths for the current alternative matched\n // try the next alternative\n }\n // none of the alternatives could be matched\n return undefined\n }\n }\n }\n function buildSingleAlternativeLookaheadFunction(alt, tokenMatcher, dynamicTokensEnabled) {\n const areAllOneTokenLookahead = every(alt, (currPath) => {\n return currPath.length === 1\n })\n const numOfPaths = alt.length\n // optimized (common) case of all the lookaheads paths requiring only\n // a single token lookahead.\n if (areAllOneTokenLookahead && !dynamicTokensEnabled) {\n const singleTokensTypes = flatten(alt)\n if (singleTokensTypes.length === 1 && isEmpty(singleTokensTypes[0].categoryMatches)) {\n const expectedTokenType = singleTokensTypes[0]\n const expectedTokenUniqueKey = expectedTokenType.tokenTypeIdx\n return function () {\n return this.LA(1).tokenTypeIdx === expectedTokenUniqueKey\n }\n } else {\n const choiceToAlt = reduce(\n singleTokensTypes,\n (result, currTokType, idx) => {\n result[currTokType.tokenTypeIdx] = true\n forEach(currTokType.categoryMatches, (currExtendingType) => {\n result[currExtendingType] = true\n })\n return result\n },\n [],\n )\n return function () {\n const nextToken = this.LA(1)\n return choiceToAlt[nextToken.tokenTypeIdx] === true\n }\n }\n } else {\n return function () {\n nextPath: for (let j = 0; j < numOfPaths; j++) {\n const currPath = alt[j]\n const currPathLength = currPath.length\n for (let i = 0; i < currPathLength; i++) {\n const nextToken = this.LA(i + 1)\n if (tokenMatcher(nextToken, currPath[i]) === false) {\n // mismatch in current path\n // try the next pth\n continue nextPath\n }\n }\n // found a full path that matches.\n return true\n }\n // none of the paths matched\n return false\n }\n }\n }\n class RestDefinitionFinderWalker extends RestWalker {\n constructor(topProd, targetOccurrence, targetProdType) {\n super()\n this.topProd = topProd\n this.targetOccurrence = targetOccurrence\n this.targetProdType = targetProdType\n }\n startWalking() {\n this.walk(this.topProd)\n return this.restDef\n }\n checkIsTarget(node, expectedProdType, currRest, prevRest) {\n if (node.idx === this.targetOccurrence && this.targetProdType === expectedProdType) {\n this.restDef = currRest.concat(prevRest)\n return true\n }\n // performance optimization, do not iterate over the entire Grammar ast after we have found the target\n return false\n }\n walkOption(optionProd, currRest, prevRest) {\n if (!this.checkIsTarget(optionProd, PROD_TYPE.OPTION, currRest, prevRest)) {\n super.walkOption(optionProd, currRest, prevRest)\n }\n }\n walkAtLeastOne(atLeastOneProd, currRest, prevRest) {\n if (!this.checkIsTarget(atLeastOneProd, PROD_TYPE.REPETITION_MANDATORY, currRest, prevRest)) {\n super.walkOption(atLeastOneProd, currRest, prevRest)\n }\n }\n walkAtLeastOneSep(atLeastOneSepProd, currRest, prevRest) {\n if (!this.checkIsTarget(atLeastOneSepProd, PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR, currRest, prevRest)) {\n super.walkOption(atLeastOneSepProd, currRest, prevRest)\n }\n }\n walkMany(manyProd, currRest, prevRest) {\n if (!this.checkIsTarget(manyProd, PROD_TYPE.REPETITION, currRest, prevRest)) {\n super.walkOption(manyProd, currRest, prevRest)\n }\n }\n walkManySep(manySepProd, currRest, prevRest) {\n if (!this.checkIsTarget(manySepProd, PROD_TYPE.REPETITION_WITH_SEPARATOR, currRest, prevRest)) {\n super.walkOption(manySepProd, currRest, prevRest)\n }\n }\n }\n /**\n * Returns the definition of a target production in a top level level rule.\n */\n class InsideDefinitionFinderVisitor extends GAstVisitor {\n constructor(targetOccurrence, targetProdType, targetRef) {\n super()\n this.targetOccurrence = targetOccurrence\n this.targetProdType = targetProdType\n this.targetRef = targetRef\n this.result = []\n }\n checkIsTarget(node, expectedProdName) {\n if (\n node.idx === this.targetOccurrence &&\n this.targetProdType === expectedProdName &&\n (this.targetRef === undefined || node === this.targetRef)\n ) {\n this.result = node.definition\n }\n }\n visitOption(node) {\n this.checkIsTarget(node, PROD_TYPE.OPTION)\n }\n visitRepetition(node) {\n this.checkIsTarget(node, PROD_TYPE.REPETITION)\n }\n visitRepetitionMandatory(node) {\n this.checkIsTarget(node, PROD_TYPE.REPETITION_MANDATORY)\n }\n visitRepetitionMandatoryWithSeparator(node) {\n this.checkIsTarget(node, PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR)\n }\n visitRepetitionWithSeparator(node) {\n this.checkIsTarget(node, PROD_TYPE.REPETITION_WITH_SEPARATOR)\n }\n visitAlternation(node) {\n this.checkIsTarget(node, PROD_TYPE.ALTERNATION)\n }\n }\n function initializeArrayOfArrays(size) {\n const result = new Array(size)\n for (let i = 0; i < size; i++) {\n result[i] = []\n }\n return result\n }\n /**\n * A sort of hash function between a Path in the grammar and a string.\n * Note that this returns multiple \"hashes\" to support the scenario of token categories.\n * - A single path with categories may match multiple **actual** paths.\n */\n function pathToHashKeys(path) {\n let keys = ['']\n for (let i = 0; i < path.length; i++) {\n const tokType = path[i]\n const longerKeys = []\n for (let j = 0; j < keys.length; j++) {\n const currShorterKey = keys[j]\n longerKeys.push(currShorterKey + '_' + tokType.tokenTypeIdx)\n for (let t = 0; t < tokType.categoryMatches.length; t++) {\n const categoriesKeySuffix = '_' + tokType.categoryMatches[t]\n longerKeys.push(currShorterKey + categoriesKeySuffix)\n }\n }\n keys = longerKeys\n }\n return keys\n }\n /**\n * Imperative style due to being called from a hot spot\n */\n function isUniquePrefixHash(altKnownPathsKeys, searchPathKeys, idx) {\n for (let currAltIdx = 0; currAltIdx < altKnownPathsKeys.length; currAltIdx++) {\n // We only want to test vs the other alternatives\n if (currAltIdx === idx) {\n continue\n }\n const otherAltKnownPathsKeys = altKnownPathsKeys[currAltIdx]\n for (let searchIdx = 0; searchIdx < searchPathKeys.length; searchIdx++) {\n const searchKey = searchPathKeys[searchIdx]\n if (otherAltKnownPathsKeys[searchKey] === true) {\n return false\n }\n }\n }\n // None of the SearchPathKeys were found in any of the other alternatives\n return true\n }\n function lookAheadSequenceFromAlternatives(altsDefs, k) {\n const partialAlts = map(altsDefs, (currAlt) => possiblePathsFrom([currAlt], 1))\n const finalResult = initializeArrayOfArrays(partialAlts.length)\n const altsHashes = map(partialAlts, (currAltPaths) => {\n const dict = {}\n forEach(currAltPaths, (item) => {\n const keys = pathToHashKeys(item.partialPath)\n forEach(keys, (currKey) => {\n dict[currKey] = true\n })\n })\n return dict\n })\n let newData = partialAlts\n // maxLookahead loop\n for (let pathLength = 1; pathLength <= k; pathLength++) {\n const currDataset = newData\n newData = initializeArrayOfArrays(currDataset.length)\n // alternatives loop\n for (let altIdx = 0; altIdx < currDataset.length; altIdx++) {\n const currAltPathsAndSuffixes = currDataset[altIdx]\n // paths in current alternative loop\n for (let currPathIdx = 0; currPathIdx < currAltPathsAndSuffixes.length; currPathIdx++) {\n const currPathPrefix = currAltPathsAndSuffixes[currPathIdx].partialPath\n const suffixDef = currAltPathsAndSuffixes[currPathIdx].suffixDef\n const prefixKeys = pathToHashKeys(currPathPrefix)\n const isUnique = isUniquePrefixHash(altsHashes, prefixKeys, altIdx)\n // End of the line for this path.\n if (isUnique || isEmpty(suffixDef) || currPathPrefix.length === k) {\n const currAltResult = finalResult[altIdx]\n // TODO: Can we implement a containsPath using Maps/Dictionaries?\n if (containsPath(currAltResult, currPathPrefix) === false) {\n currAltResult.push(currPathPrefix)\n // Update all new keys for the current path.\n for (let j = 0; j < prefixKeys.length; j++) {\n const currKey = prefixKeys[j]\n altsHashes[altIdx][currKey] = true\n }\n }\n }\n // Expand longer paths\n else {\n const newPartialPathsAndSuffixes = possiblePathsFrom(suffixDef, pathLength + 1, currPathPrefix)\n newData[altIdx] = newData[altIdx].concat(newPartialPathsAndSuffixes)\n // Update keys for new known paths\n forEach(newPartialPathsAndSuffixes, (item) => {\n const prefixKeys = pathToHashKeys(item.partialPath)\n forEach(prefixKeys, (key) => {\n altsHashes[altIdx][key] = true\n })\n })\n }\n }\n }\n }\n return finalResult\n }\n function getLookaheadPathsForOr(occurrence, ruleGrammar, k, orProd) {\n const visitor = new InsideDefinitionFinderVisitor(occurrence, PROD_TYPE.ALTERNATION, orProd)\n ruleGrammar.accept(visitor)\n return lookAheadSequenceFromAlternatives(visitor.result, k)\n }\n function getLookaheadPathsForOptionalProd(occurrence, ruleGrammar, prodType, k) {\n const insideDefVisitor = new InsideDefinitionFinderVisitor(occurrence, prodType)\n ruleGrammar.accept(insideDefVisitor)\n const insideDef = insideDefVisitor.result\n const afterDefWalker = new RestDefinitionFinderWalker(ruleGrammar, occurrence, prodType)\n const afterDef = afterDefWalker.startWalking()\n const insideFlat = new Alternative({ definition: insideDef })\n const afterFlat = new Alternative({ definition: afterDef })\n return lookAheadSequenceFromAlternatives([insideFlat, afterFlat], k)\n }\n function containsPath(alternative, searchPath) {\n compareOtherPath: for (let i = 0; i < alternative.length; i++) {\n const otherPath = alternative[i]\n if (otherPath.length !== searchPath.length) {\n continue\n }\n for (let j = 0; j < otherPath.length; j++) {\n const searchTok = searchPath[j]\n const otherTok = otherPath[j]\n const matchingTokens =\n searchTok === otherTok || otherTok.categoryMatchesMap[searchTok.tokenTypeIdx] !== undefined\n if (matchingTokens === false) {\n continue compareOtherPath\n }\n }\n return true\n }\n return false\n }\n function isStrictPrefixOfPath(prefix, other) {\n return (\n prefix.length < other.length &&\n every(prefix, (tokType, idx) => {\n const otherTokType = other[idx]\n return tokType === otherTokType || otherTokType.categoryMatchesMap[tokType.tokenTypeIdx]\n })\n )\n }\n function areTokenCategoriesNotUsed(lookAheadPaths) {\n return every(lookAheadPaths, (singleAltPaths) =>\n every(singleAltPaths, (singlePath) => every(singlePath, (token) => isEmpty(token.categoryMatches))),\n )\n }\n\n function validateLookahead(options) {\n const lookaheadValidationErrorMessages = options.lookaheadStrategy.validate({\n rules: options.rules,\n tokenTypes: options.tokenTypes,\n grammarName: options.grammarName,\n })\n return map(lookaheadValidationErrorMessages, (errorMessage) =>\n Object.assign({ type: ParserDefinitionErrorType.CUSTOM_LOOKAHEAD_VALIDATION }, errorMessage),\n )\n }\n function validateGrammar$1(topLevels, tokenTypes, errMsgProvider, grammarName) {\n const duplicateErrors = flatMap(topLevels, (currTopLevel) =>\n validateDuplicateProductions(currTopLevel, errMsgProvider),\n )\n const termsNamespaceConflictErrors = checkTerminalAndNoneTerminalsNameSpace(topLevels, tokenTypes, errMsgProvider)\n const tooManyAltsErrors = flatMap(topLevels, (curRule) => validateTooManyAlts(curRule, errMsgProvider))\n const duplicateRulesError = flatMap(topLevels, (curRule) =>\n validateRuleDoesNotAlreadyExist(curRule, topLevels, grammarName, errMsgProvider),\n )\n return duplicateErrors.concat(termsNamespaceConflictErrors, tooManyAltsErrors, duplicateRulesError)\n }\n function validateDuplicateProductions(topLevelRule, errMsgProvider) {\n const collectorVisitor = new OccurrenceValidationCollector()\n topLevelRule.accept(collectorVisitor)\n const allRuleProductions = collectorVisitor.allProductions\n const productionGroups = groupBy$1(allRuleProductions, identifyProductionForDuplicates)\n const duplicates = pickBy(productionGroups, (currGroup) => {\n return currGroup.length > 1\n })\n const errors = map(values(duplicates), (currDuplicates) => {\n const firstProd = head(currDuplicates)\n const msg = errMsgProvider.buildDuplicateFoundError(topLevelRule, currDuplicates)\n const dslName = getProductionDslName(firstProd)\n const defError = {\n message: msg,\n type: ParserDefinitionErrorType.DUPLICATE_PRODUCTIONS,\n ruleName: topLevelRule.name,\n dslName: dslName,\n occurrence: firstProd.idx,\n }\n const param = getExtraProductionArgument(firstProd)\n if (param) {\n defError.parameter = param\n }\n return defError\n })\n return errors\n }\n function identifyProductionForDuplicates(prod) {\n return `${getProductionDslName(prod)}_#_${prod.idx}_#_${getExtraProductionArgument(prod)}`\n }\n function getExtraProductionArgument(prod) {\n if (prod instanceof Terminal) {\n return prod.terminalType.name\n } else if (prod instanceof NonTerminal) {\n return prod.nonTerminalName\n } else {\n return ''\n }\n }\n class OccurrenceValidationCollector extends GAstVisitor {\n constructor() {\n super(...arguments)\n this.allProductions = []\n }\n visitNonTerminal(subrule) {\n this.allProductions.push(subrule)\n }\n visitOption(option) {\n this.allProductions.push(option)\n }\n visitRepetitionWithSeparator(manySep) {\n this.allProductions.push(manySep)\n }\n visitRepetitionMandatory(atLeastOne) {\n this.allProductions.push(atLeastOne)\n }\n visitRepetitionMandatoryWithSeparator(atLeastOneSep) {\n this.allProductions.push(atLeastOneSep)\n }\n visitRepetition(many) {\n this.allProductions.push(many)\n }\n visitAlternation(or) {\n this.allProductions.push(or)\n }\n visitTerminal(terminal) {\n this.allProductions.push(terminal)\n }\n }\n function validateRuleDoesNotAlreadyExist(rule, allRules, className, errMsgProvider) {\n const errors = []\n const occurrences = reduce(\n allRules,\n (result, curRule) => {\n if (curRule.name === rule.name) {\n return result + 1\n }\n return result\n },\n 0,\n )\n if (occurrences > 1) {\n const errMsg = errMsgProvider.buildDuplicateRuleNameError({\n topLevelRule: rule,\n grammarName: className,\n })\n errors.push({\n message: errMsg,\n type: ParserDefinitionErrorType.DUPLICATE_RULE_NAME,\n ruleName: rule.name,\n })\n }\n return errors\n }\n // TODO: is there anyway to get only the rule names of rules inherited from the super grammars?\n // This is not part of the IGrammarErrorProvider because the validation cannot be performed on\n // The grammar structure, only at runtime.\n function validateRuleIsOverridden(ruleName, definedRulesNames, className) {\n const errors = []\n let errMsg\n if (!includes(definedRulesNames, ruleName)) {\n errMsg =\n `Invalid rule override, rule: ->${ruleName}<- cannot be overridden in the grammar: ->${className}<-` +\n `as it is not defined in any of the super grammars `\n errors.push({\n message: errMsg,\n type: ParserDefinitionErrorType.INVALID_RULE_OVERRIDE,\n ruleName: ruleName,\n })\n }\n return errors\n }\n function validateNoLeftRecursion(topRule, currRule, errMsgProvider, path = []) {\n const errors = []\n const nextNonTerminals = getFirstNoneTerminal(currRule.definition)\n if (isEmpty(nextNonTerminals)) {\n return []\n } else {\n const ruleName = topRule.name\n const foundLeftRecursion = includes(nextNonTerminals, topRule)\n if (foundLeftRecursion) {\n errors.push({\n message: errMsgProvider.buildLeftRecursionError({\n topLevelRule: topRule,\n leftRecursionPath: path,\n }),\n type: ParserDefinitionErrorType.LEFT_RECURSION,\n ruleName: ruleName,\n })\n }\n // we are only looking for cyclic paths leading back to the specific topRule\n // other cyclic paths are ignored, we still need this difference to avoid infinite loops...\n const validNextSteps = difference$1(nextNonTerminals, path.concat([topRule]))\n const errorsFromNextSteps = flatMap(validNextSteps, (currRefRule) => {\n const newPath = clone(path)\n newPath.push(currRefRule)\n return validateNoLeftRecursion(topRule, currRefRule, errMsgProvider, newPath)\n })\n return errors.concat(errorsFromNextSteps)\n }\n }\n function getFirstNoneTerminal(definition) {\n let result = []\n if (isEmpty(definition)) {\n return result\n }\n const firstProd = head(definition)\n /* istanbul ignore else */\n if (firstProd instanceof NonTerminal) {\n result.push(firstProd.referencedRule)\n } else if (\n firstProd instanceof Alternative ||\n firstProd instanceof Option ||\n firstProd instanceof RepetitionMandatory ||\n firstProd instanceof RepetitionMandatoryWithSeparator ||\n firstProd instanceof RepetitionWithSeparator ||\n firstProd instanceof Repetition\n ) {\n result = result.concat(getFirstNoneTerminal(firstProd.definition))\n } else if (firstProd instanceof Alternation) {\n // each sub definition in alternation is a FLAT\n result = flatten(map(firstProd.definition, (currSubDef) => getFirstNoneTerminal(currSubDef.definition)))\n } else if (firstProd instanceof Terminal);\n else {\n throw Error('non exhaustive match')\n }\n const isFirstOptional = isOptionalProd(firstProd)\n const hasMore = definition.length > 1\n if (isFirstOptional && hasMore) {\n const rest = drop(definition)\n return result.concat(getFirstNoneTerminal(rest))\n } else {\n return result\n }\n }\n class OrCollector extends GAstVisitor {\n constructor() {\n super(...arguments)\n this.alternations = []\n }\n visitAlternation(node) {\n this.alternations.push(node)\n }\n }\n function validateEmptyOrAlternative(topLevelRule, errMsgProvider) {\n const orCollector = new OrCollector()\n topLevelRule.accept(orCollector)\n const ors = orCollector.alternations\n const errors = flatMap(ors, (currOr) => {\n const exceptLast = dropRight(currOr.definition)\n return flatMap(exceptLast, (currAlternative, currAltIdx) => {\n const possibleFirstInAlt = nextPossibleTokensAfter([currAlternative], [], tokenStructuredMatcher, 1)\n if (isEmpty(possibleFirstInAlt)) {\n return [\n {\n message: errMsgProvider.buildEmptyAlternationError({\n topLevelRule: topLevelRule,\n alternation: currOr,\n emptyChoiceIdx: currAltIdx,\n }),\n type: ParserDefinitionErrorType.NONE_LAST_EMPTY_ALT,\n ruleName: topLevelRule.name,\n occurrence: currOr.idx,\n alternative: currAltIdx + 1,\n },\n ]\n } else {\n return []\n }\n })\n })\n return errors\n }\n function validateAmbiguousAlternationAlternatives(topLevelRule, globalMaxLookahead, errMsgProvider) {\n const orCollector = new OrCollector()\n topLevelRule.accept(orCollector)\n let ors = orCollector.alternations\n // New Handling of ignoring ambiguities\n // - https://github.com/chevrotain/chevrotain/issues/869\n ors = reject(ors, (currOr) => currOr.ignoreAmbiguities === true)\n const errors = flatMap(ors, (currOr) => {\n const currOccurrence = currOr.idx\n const actualMaxLookahead = currOr.maxLookahead || globalMaxLookahead\n const alternatives = getLookaheadPathsForOr(currOccurrence, topLevelRule, actualMaxLookahead, currOr)\n const altsAmbiguityErrors = checkAlternativesAmbiguities(alternatives, currOr, topLevelRule, errMsgProvider)\n const altsPrefixAmbiguityErrors = checkPrefixAlternativesAmbiguities(\n alternatives,\n currOr,\n topLevelRule,\n errMsgProvider,\n )\n return altsAmbiguityErrors.concat(altsPrefixAmbiguityErrors)\n })\n return errors\n }\n class RepetitionCollector extends GAstVisitor {\n constructor() {\n super(...arguments)\n this.allProductions = []\n }\n visitRepetitionWithSeparator(manySep) {\n this.allProductions.push(manySep)\n }\n visitRepetitionMandatory(atLeastOne) {\n this.allProductions.push(atLeastOne)\n }\n visitRepetitionMandatoryWithSeparator(atLeastOneSep) {\n this.allProductions.push(atLeastOneSep)\n }\n visitRepetition(many) {\n this.allProductions.push(many)\n }\n }\n function validateTooManyAlts(topLevelRule, errMsgProvider) {\n const orCollector = new OrCollector()\n topLevelRule.accept(orCollector)\n const ors = orCollector.alternations\n const errors = flatMap(ors, (currOr) => {\n if (currOr.definition.length > 255) {\n return [\n {\n message: errMsgProvider.buildTooManyAlternativesError({\n topLevelRule: topLevelRule,\n alternation: currOr,\n }),\n type: ParserDefinitionErrorType.TOO_MANY_ALTS,\n ruleName: topLevelRule.name,\n occurrence: currOr.idx,\n },\n ]\n } else {\n return []\n }\n })\n return errors\n }\n function validateSomeNonEmptyLookaheadPath(topLevelRules, maxLookahead, errMsgProvider) {\n const errors = []\n forEach(topLevelRules, (currTopRule) => {\n const collectorVisitor = new RepetitionCollector()\n currTopRule.accept(collectorVisitor)\n const allRuleProductions = collectorVisitor.allProductions\n forEach(allRuleProductions, (currProd) => {\n const prodType = getProdType(currProd)\n const actualMaxLookahead = currProd.maxLookahead || maxLookahead\n const currOccurrence = currProd.idx\n const paths = getLookaheadPathsForOptionalProd(currOccurrence, currTopRule, prodType, actualMaxLookahead)\n const pathsInsideProduction = paths[0]\n if (isEmpty(flatten(pathsInsideProduction))) {\n const errMsg = errMsgProvider.buildEmptyRepetitionError({\n topLevelRule: currTopRule,\n repetition: currProd,\n })\n errors.push({\n message: errMsg,\n type: ParserDefinitionErrorType.NO_NON_EMPTY_LOOKAHEAD,\n ruleName: currTopRule.name,\n })\n }\n })\n })\n return errors\n }\n function checkAlternativesAmbiguities(alternatives, alternation, rule, errMsgProvider) {\n const foundAmbiguousPaths = []\n const identicalAmbiguities = reduce(\n alternatives,\n (result, currAlt, currAltIdx) => {\n // ignore (skip) ambiguities with this alternative\n if (alternation.definition[currAltIdx].ignoreAmbiguities === true) {\n return result\n }\n forEach(currAlt, (currPath) => {\n const altsCurrPathAppearsIn = [currAltIdx]\n forEach(alternatives, (currOtherAlt, currOtherAltIdx) => {\n if (\n currAltIdx !== currOtherAltIdx &&\n containsPath(currOtherAlt, currPath) &&\n // ignore (skip) ambiguities with this \"other\" alternative\n alternation.definition[currOtherAltIdx].ignoreAmbiguities !== true\n ) {\n altsCurrPathAppearsIn.push(currOtherAltIdx)\n }\n })\n if (altsCurrPathAppearsIn.length > 1 && !containsPath(foundAmbiguousPaths, currPath)) {\n foundAmbiguousPaths.push(currPath)\n result.push({\n alts: altsCurrPathAppearsIn,\n path: currPath,\n })\n }\n })\n return result\n },\n [],\n )\n const currErrors = map(identicalAmbiguities, (currAmbDescriptor) => {\n const ambgIndices = map(currAmbDescriptor.alts, (currAltIdx) => currAltIdx + 1)\n const currMessage = errMsgProvider.buildAlternationAmbiguityError({\n topLevelRule: rule,\n alternation: alternation,\n ambiguityIndices: ambgIndices,\n prefixPath: currAmbDescriptor.path,\n })\n return {\n message: currMessage,\n type: ParserDefinitionErrorType.AMBIGUOUS_ALTS,\n ruleName: rule.name,\n occurrence: alternation.idx,\n alternatives: currAmbDescriptor.alts,\n }\n })\n return currErrors\n }\n function checkPrefixAlternativesAmbiguities(alternatives, alternation, rule, errMsgProvider) {\n // flatten\n const pathsAndIndices = reduce(\n alternatives,\n (result, currAlt, idx) => {\n const currPathsAndIdx = map(currAlt, (currPath) => {\n return { idx: idx, path: currPath }\n })\n return result.concat(currPathsAndIdx)\n },\n [],\n )\n const errors = compact(\n flatMap(pathsAndIndices, (currPathAndIdx) => {\n const alternativeGast = alternation.definition[currPathAndIdx.idx]\n // ignore (skip) ambiguities with this alternative\n if (alternativeGast.ignoreAmbiguities === true) {\n return []\n }\n const targetIdx = currPathAndIdx.idx\n const targetPath = currPathAndIdx.path\n const prefixAmbiguitiesPathsAndIndices = filter(pathsAndIndices, (searchPathAndIdx) => {\n // prefix ambiguity can only be created from lower idx (higher priority) path\n return (\n // ignore (skip) ambiguities with this \"other\" alternative\n alternation.definition[searchPathAndIdx.idx].ignoreAmbiguities !== true &&\n searchPathAndIdx.idx < targetIdx &&\n // checking for strict prefix because identical lookaheads\n // will be be detected using a different validation.\n isStrictPrefixOfPath(searchPathAndIdx.path, targetPath)\n )\n })\n const currPathPrefixErrors = map(prefixAmbiguitiesPathsAndIndices, (currAmbPathAndIdx) => {\n const ambgIndices = [currAmbPathAndIdx.idx + 1, targetIdx + 1]\n const occurrence = alternation.idx === 0 ? '' : alternation.idx\n const message = errMsgProvider.buildAlternationPrefixAmbiguityError({\n topLevelRule: rule,\n alternation: alternation,\n ambiguityIndices: ambgIndices,\n prefixPath: currAmbPathAndIdx.path,\n })\n return {\n message: message,\n type: ParserDefinitionErrorType.AMBIGUOUS_PREFIX_ALTS,\n ruleName: rule.name,\n occurrence: occurrence,\n alternatives: ambgIndices,\n }\n })\n return currPathPrefixErrors\n }),\n )\n return errors\n }\n function checkTerminalAndNoneTerminalsNameSpace(topLevels, tokenTypes, errMsgProvider) {\n const errors = []\n const tokenNames = map(tokenTypes, (currToken) => currToken.name)\n forEach(topLevels, (currRule) => {\n const currRuleName = currRule.name\n if (includes(tokenNames, currRuleName)) {\n const errMsg = errMsgProvider.buildNamespaceConflictError(currRule)\n errors.push({\n message: errMsg,\n type: ParserDefinitionErrorType.CONFLICT_TOKENS_RULES_NAMESPACE,\n ruleName: currRuleName,\n })\n }\n })\n return errors\n }\n\n function resolveGrammar(options) {\n const actualOptions = defaults$1(options, {\n errMsgProvider: defaultGrammarResolverErrorProvider,\n })\n const topRulesTable = {}\n forEach(options.rules, (rule) => {\n topRulesTable[rule.name] = rule\n })\n return resolveGrammar$1(topRulesTable, actualOptions.errMsgProvider)\n }\n function validateGrammar(options) {\n options = defaults$1(options, {\n errMsgProvider: defaultGrammarValidatorErrorProvider,\n })\n return validateGrammar$1(options.rules, options.tokenTypes, options.errMsgProvider, options.grammarName)\n }\n\n const MISMATCHED_TOKEN_EXCEPTION = 'MismatchedTokenException'\n const NO_VIABLE_ALT_EXCEPTION = 'NoViableAltException'\n const EARLY_EXIT_EXCEPTION = 'EarlyExitException'\n const NOT_ALL_INPUT_PARSED_EXCEPTION = 'NotAllInputParsedException'\n const RECOGNITION_EXCEPTION_NAMES = [\n MISMATCHED_TOKEN_EXCEPTION,\n NO_VIABLE_ALT_EXCEPTION,\n EARLY_EXIT_EXCEPTION,\n NOT_ALL_INPUT_PARSED_EXCEPTION,\n ]\n Object.freeze(RECOGNITION_EXCEPTION_NAMES)\n // hacks to bypass no support for custom Errors in javascript/typescript\n function isRecognitionException(error) {\n // can't do instanceof on hacked custom js exceptions\n return includes(RECOGNITION_EXCEPTION_NAMES, error.name)\n }\n class RecognitionException extends Error {\n constructor(message, token) {\n super(message)\n this.token = token\n this.resyncedTokens = []\n // fix prototype chain when typescript target is ES5\n Object.setPrototypeOf(this, new.target.prototype)\n /* istanbul ignore next - V8 workaround to remove constructor from stacktrace when typescript target is ES5 */\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor)\n }\n }\n }\n class MismatchedTokenException extends RecognitionException {\n constructor(message, token, previousToken) {\n super(message, token)\n this.previousToken = previousToken\n this.name = MISMATCHED_TOKEN_EXCEPTION\n }\n }\n class NoViableAltException extends RecognitionException {\n constructor(message, token, previousToken) {\n super(message, token)\n this.previousToken = previousToken\n this.name = NO_VIABLE_ALT_EXCEPTION\n }\n }\n class NotAllInputParsedException extends RecognitionException {\n constructor(message, token) {\n super(message, token)\n this.name = NOT_ALL_INPUT_PARSED_EXCEPTION\n }\n }\n class EarlyExitException extends RecognitionException {\n constructor(message, token, previousToken) {\n super(message, token)\n this.previousToken = previousToken\n this.name = EARLY_EXIT_EXCEPTION\n }\n }\n\n const EOF_FOLLOW_KEY = {}\n const IN_RULE_RECOVERY_EXCEPTION = 'InRuleRecoveryException'\n class InRuleRecoveryException extends Error {\n constructor(message) {\n super(message)\n this.name = IN_RULE_RECOVERY_EXCEPTION\n }\n }\n /**\n * This trait is responsible for the error recovery and fault tolerant logic\n */\n class Recoverable {\n initRecoverable(config) {\n this.firstAfterRepMap = {}\n this.resyncFollows = {}\n this.recoveryEnabled = has(config, 'recoveryEnabled')\n ? config.recoveryEnabled // assumes end user provides the correct config value/type\n : DEFAULT_PARSER_CONFIG.recoveryEnabled\n // performance optimization, NOOP will be inlined which\n // effectively means that this optional feature does not exist\n // when not used.\n if (this.recoveryEnabled) {\n this.attemptInRepetitionRecovery = attemptInRepetitionRecovery\n }\n }\n getTokenToInsert(tokType) {\n const tokToInsert = createTokenInstance(tokType, '', NaN, NaN, NaN, NaN, NaN, NaN)\n tokToInsert.isInsertedInRecovery = true\n return tokToInsert\n }\n canTokenTypeBeInsertedInRecovery(tokType) {\n return true\n }\n canTokenTypeBeDeletedInRecovery(tokType) {\n return true\n }\n tryInRepetitionRecovery(grammarRule, grammarRuleArgs, lookAheadFunc, expectedTokType) {\n // TODO: can the resyncTokenType be cached?\n const reSyncTokType = this.findReSyncTokenType()\n const savedLexerState = this.exportLexerState()\n const resyncedTokens = []\n let passedResyncPoint = false\n const nextTokenWithoutResync = this.LA(1)\n let currToken = this.LA(1)\n const generateErrorMessage = () => {\n const previousToken = this.LA(0)\n // we are preemptively re-syncing before an error has been detected, therefor we must reproduce\n // the error that would have been thrown\n const msg = this.errorMessageProvider.buildMismatchTokenMessage({\n expected: expectedTokType,\n actual: nextTokenWithoutResync,\n previous: previousToken,\n ruleName: this.getCurrRuleFullName(),\n })\n const error = new MismatchedTokenException(msg, nextTokenWithoutResync, this.LA(0))\n // the first token here will be the original cause of the error, this is not part of the resyncedTokens property.\n error.resyncedTokens = dropRight(resyncedTokens)\n this.SAVE_ERROR(error)\n }\n while (!passedResyncPoint) {\n // re-synced to a point where we can safely exit the repetition/\n if (this.tokenMatcher(currToken, expectedTokType)) {\n generateErrorMessage()\n return // must return here to avoid reverting the inputIdx\n } else if (lookAheadFunc.call(this)) {\n // we skipped enough tokens so we can resync right back into another iteration of the repetition grammar rule\n generateErrorMessage()\n // recursive invocation in other to support multiple re-syncs in the same top level repetition grammar rule\n grammarRule.apply(this, grammarRuleArgs)\n return // must return here to avoid reverting the inputIdx\n } else if (this.tokenMatcher(currToken, reSyncTokType)) {\n passedResyncPoint = true\n } else {\n currToken = this.SKIP_TOKEN()\n this.addToResyncTokens(currToken, resyncedTokens)\n }\n }\n // we were unable to find a CLOSER point to resync inside the Repetition, reset the state.\n // The parsing exception we were trying to prevent will happen in the NEXT parsing step. it may be handled by\n // \"between rules\" resync recovery later in the flow.\n this.importLexerState(savedLexerState)\n }\n shouldInRepetitionRecoveryBeTried(expectTokAfterLastMatch, nextTokIdx, notStuck) {\n // Edge case of arriving from a MANY repetition which is stuck\n // Attempting recovery in this case could cause an infinite loop\n if (notStuck === false) {\n return false\n }\n // no need to recover, next token is what we expect...\n if (this.tokenMatcher(this.LA(1), expectTokAfterLastMatch)) {\n return false\n }\n // error recovery is disabled during backtracking as it can make the parser ignore a valid grammar path\n // and prefer some backtracking path that includes recovered errors.\n if (this.isBackTracking()) {\n return false\n }\n // if we can perform inRule recovery (single token insertion or deletion) we always prefer that recovery algorithm\n // because if it works, it makes the least amount of changes to the input stream (greedy algorithm)\n //noinspection RedundantIfStatementJS\n if (\n this.canPerformInRuleRecovery(\n expectTokAfterLastMatch,\n this.getFollowsForInRuleRecovery(expectTokAfterLastMatch, nextTokIdx),\n )\n ) {\n return false\n }\n return true\n }\n // Error Recovery functionality\n getFollowsForInRuleRecovery(tokType, tokIdxInRule) {\n const grammarPath = this.getCurrentGrammarPath(tokType, tokIdxInRule)\n const follows = this.getNextPossibleTokenTypes(grammarPath)\n return follows\n }\n tryInRuleRecovery(expectedTokType, follows) {\n if (this.canRecoverWithSingleTokenInsertion(expectedTokType, follows)) {\n const tokToInsert = this.getTokenToInsert(expectedTokType)\n return tokToInsert\n }\n if (this.canRecoverWithSingleTokenDeletion(expectedTokType)) {\n const nextTok = this.SKIP_TOKEN()\n this.consumeToken()\n return nextTok\n }\n throw new InRuleRecoveryException('sad sad panda')\n }\n canPerformInRuleRecovery(expectedToken, follows) {\n return (\n this.canRecoverWithSingleTokenInsertion(expectedToken, follows) ||\n this.canRecoverWithSingleTokenDeletion(expectedToken)\n )\n }\n canRecoverWithSingleTokenInsertion(expectedTokType, follows) {\n if (!this.canTokenTypeBeInsertedInRecovery(expectedTokType)) {\n return false\n }\n // must know the possible following tokens to perform single token insertion\n if (isEmpty(follows)) {\n return false\n }\n const mismatchedTok = this.LA(1)\n const isMisMatchedTokInFollows =\n find$1(follows, (possibleFollowsTokType) => {\n return this.tokenMatcher(mismatchedTok, possibleFollowsTokType)\n }) !== undefined\n return isMisMatchedTokInFollows\n }\n canRecoverWithSingleTokenDeletion(expectedTokType) {\n if (!this.canTokenTypeBeDeletedInRecovery(expectedTokType)) {\n return false\n }\n const isNextTokenWhatIsExpected = this.tokenMatcher(this.LA(2), expectedTokType)\n return isNextTokenWhatIsExpected\n }\n isInCurrentRuleReSyncSet(tokenTypeIdx) {\n const followKey = this.getCurrFollowKey()\n const currentRuleReSyncSet = this.getFollowSetFromFollowKey(followKey)\n return includes(currentRuleReSyncSet, tokenTypeIdx)\n }\n findReSyncTokenType() {\n const allPossibleReSyncTokTypes = this.flattenFollowSet()\n // this loop will always terminate as EOF is always in the follow stack and also always (virtually) in the input\n let nextToken = this.LA(1)\n let k = 2\n while (true) {\n const foundMatch = find$1(allPossibleReSyncTokTypes, (resyncTokType) => {\n const canMatch = tokenMatcher(nextToken, resyncTokType)\n return canMatch\n })\n if (foundMatch !== undefined) {\n return foundMatch\n }\n nextToken = this.LA(k)\n k++\n }\n }\n getCurrFollowKey() {\n // the length is at least one as we always add the ruleName to the stack before invoking the rule.\n if (this.RULE_STACK.length === 1) {\n return EOF_FOLLOW_KEY\n }\n const currRuleShortName = this.getLastExplicitRuleShortName()\n const currRuleIdx = this.getLastExplicitRuleOccurrenceIndex()\n const prevRuleShortName = this.getPreviousExplicitRuleShortName()\n return {\n ruleName: this.shortRuleNameToFullName(currRuleShortName),\n idxInCallingRule: currRuleIdx,\n inRule: this.shortRuleNameToFullName(prevRuleShortName),\n }\n }\n buildFullFollowKeyStack() {\n const explicitRuleStack = this.RULE_STACK\n const explicitOccurrenceStack = this.RULE_OCCURRENCE_STACK\n return map(explicitRuleStack, (ruleName, idx) => {\n if (idx === 0) {\n return EOF_FOLLOW_KEY\n }\n return {\n ruleName: this.shortRuleNameToFullName(ruleName),\n idxInCallingRule: explicitOccurrenceStack[idx],\n inRule: this.shortRuleNameToFullName(explicitRuleStack[idx - 1]),\n }\n })\n }\n flattenFollowSet() {\n const followStack = map(this.buildFullFollowKeyStack(), (currKey) => {\n return this.getFollowSetFromFollowKey(currKey)\n })\n return flatten(followStack)\n }\n getFollowSetFromFollowKey(followKey) {\n if (followKey === EOF_FOLLOW_KEY) {\n return [EOF]\n }\n const followName = followKey.ruleName + followKey.idxInCallingRule + IN + followKey.inRule\n return this.resyncFollows[followName]\n }\n // It does not make any sense to include a virtual EOF token in the list of resynced tokens\n // as EOF does not really exist and thus does not contain any useful information (line/column numbers)\n addToResyncTokens(token, resyncTokens) {\n if (!this.tokenMatcher(token, EOF)) {\n resyncTokens.push(token)\n }\n return resyncTokens\n }\n reSyncTo(tokType) {\n const resyncedTokens = []\n let nextTok = this.LA(1)\n while (this.tokenMatcher(nextTok, tokType) === false) {\n nextTok = this.SKIP_TOKEN()\n this.addToResyncTokens(nextTok, resyncedTokens)\n }\n // the last token is not part of the error.\n return dropRight(resyncedTokens)\n }\n attemptInRepetitionRecovery(prodFunc, args, lookaheadFunc, dslMethodIdx, prodOccurrence, nextToksWalker, notStuck) {\n // by default this is a NO-OP\n // The actual implementation is with the function(not method) below\n }\n getCurrentGrammarPath(tokType, tokIdxInRule) {\n const pathRuleStack = this.getHumanReadableRuleStack()\n const pathOccurrenceStack = clone(this.RULE_OCCURRENCE_STACK)\n const grammarPath = {\n ruleStack: pathRuleStack,\n occurrenceStack: pathOccurrenceStack,\n lastTok: tokType,\n lastTokOccurrence: tokIdxInRule,\n }\n return grammarPath\n }\n getHumanReadableRuleStack() {\n return map(this.RULE_STACK, (currShortName) => this.shortRuleNameToFullName(currShortName))\n }\n }\n function attemptInRepetitionRecovery(\n prodFunc,\n args,\n lookaheadFunc,\n dslMethodIdx,\n prodOccurrence,\n nextToksWalker,\n notStuck,\n ) {\n const key = this.getKeyForAutomaticLookahead(dslMethodIdx, prodOccurrence)\n let firstAfterRepInfo = this.firstAfterRepMap[key]\n if (firstAfterRepInfo === undefined) {\n const currRuleName = this.getCurrRuleFullName()\n const ruleGrammar = this.getGAstProductions()[currRuleName]\n const walker = new nextToksWalker(ruleGrammar, prodOccurrence)\n firstAfterRepInfo = walker.startWalking()\n this.firstAfterRepMap[key] = firstAfterRepInfo\n }\n let expectTokAfterLastMatch = firstAfterRepInfo.token\n let nextTokIdx = firstAfterRepInfo.occurrence\n const isEndOfRule = firstAfterRepInfo.isEndOfRule\n // special edge case of a TOP most repetition after which the input should END.\n // this will force an attempt for inRule recovery in that scenario.\n if (this.RULE_STACK.length === 1 && isEndOfRule && expectTokAfterLastMatch === undefined) {\n expectTokAfterLastMatch = EOF\n nextTokIdx = 1\n }\n // We don't have anything to re-sync to...\n // this condition was extracted from `shouldInRepetitionRecoveryBeTried` to act as a type-guard\n if (expectTokAfterLastMatch === undefined || nextTokIdx === undefined) {\n return\n }\n if (this.shouldInRepetitionRecoveryBeTried(expectTokAfterLastMatch, nextTokIdx, notStuck)) {\n // TODO: performance optimization: instead of passing the original args here, we modify\n // the args param (or create a new one) and make sure the lookahead func is explicitly provided\n // to avoid searching the cache for it once more.\n this.tryInRepetitionRecovery(prodFunc, args, lookaheadFunc, expectTokAfterLastMatch)\n }\n }\n\n // Lookahead keys are 32Bit integers in the form\n // TTTTTTTT-ZZZZZZZZZZZZ-YYYY-XXXXXXXX\n // XXXX -> Occurrence Index bitmap.\n // YYYY -> DSL Method Type bitmap.\n // ZZZZZZZZZZZZZZZ -> Rule short Index bitmap.\n // TTTTTTTTT -> alternation alternative index bitmap\n const BITS_FOR_METHOD_TYPE = 4\n const BITS_FOR_OCCURRENCE_IDX = 8\n // short string used as part of mapping keys.\n // being short improves the performance when composing KEYS for maps out of these\n // The 5 - 8 bits (16 possible values, are reserved for the DSL method indices)\n const OR_IDX = 1 << BITS_FOR_OCCURRENCE_IDX\n const OPTION_IDX = 2 << BITS_FOR_OCCURRENCE_IDX\n const MANY_IDX = 3 << BITS_FOR_OCCURRENCE_IDX\n const AT_LEAST_ONE_IDX = 4 << BITS_FOR_OCCURRENCE_IDX\n const MANY_SEP_IDX = 5 << BITS_FOR_OCCURRENCE_IDX\n const AT_LEAST_ONE_SEP_IDX = 6 << BITS_FOR_OCCURRENCE_IDX\n // this actually returns a number, but it is always used as a string (object prop key)\n function getKeyForAutomaticLookahead(ruleIdx, dslMethodIdx, occurrence) {\n return occurrence | dslMethodIdx | ruleIdx\n }\n\n class LLkLookaheadStrategy {\n constructor(options) {\n var _a\n this.maxLookahead =\n (_a = options === null || options === void 0 ? void 0 : options.maxLookahead) !== null && _a !== void 0\n ? _a\n : DEFAULT_PARSER_CONFIG.maxLookahead\n }\n validate(options) {\n const leftRecursionErrors = this.validateNoLeftRecursion(options.rules)\n if (isEmpty(leftRecursionErrors)) {\n const emptyAltErrors = this.validateEmptyOrAlternatives(options.rules)\n const ambiguousAltsErrors = this.validateAmbiguousAlternationAlternatives(options.rules, this.maxLookahead)\n const emptyRepetitionErrors = this.validateSomeNonEmptyLookaheadPath(options.rules, this.maxLookahead)\n const allErrors = [...leftRecursionErrors, ...emptyAltErrors, ...ambiguousAltsErrors, ...emptyRepetitionErrors]\n return allErrors\n }\n return leftRecursionErrors\n }\n validateNoLeftRecursion(rules) {\n return flatMap(rules, (currTopRule) =>\n validateNoLeftRecursion(currTopRule, currTopRule, defaultGrammarValidatorErrorProvider),\n )\n }\n validateEmptyOrAlternatives(rules) {\n return flatMap(rules, (currTopRule) =>\n validateEmptyOrAlternative(currTopRule, defaultGrammarValidatorErrorProvider),\n )\n }\n validateAmbiguousAlternationAlternatives(rules, maxLookahead) {\n return flatMap(rules, (currTopRule) =>\n validateAmbiguousAlternationAlternatives(currTopRule, maxLookahead, defaultGrammarValidatorErrorProvider),\n )\n }\n validateSomeNonEmptyLookaheadPath(rules, maxLookahead) {\n return validateSomeNonEmptyLookaheadPath(rules, maxLookahead, defaultGrammarValidatorErrorProvider)\n }\n buildLookaheadForAlternation(options) {\n return buildLookaheadFuncForOr(\n options.prodOccurrence,\n options.rule,\n options.maxLookahead,\n options.hasPredicates,\n options.dynamicTokensEnabled,\n buildAlternativesLookAheadFunc,\n )\n }\n buildLookaheadForOptional(options) {\n return buildLookaheadFuncForOptionalProd(\n options.prodOccurrence,\n options.rule,\n options.maxLookahead,\n options.dynamicTokensEnabled,\n getProdType(options.prodType),\n buildSingleAlternativeLookaheadFunction,\n )\n }\n }\n\n /**\n * Trait responsible for the lookahead related utilities and optimizations.\n */\n class LooksAhead {\n initLooksAhead(config) {\n this.dynamicTokensEnabled = has(config, 'dynamicTokensEnabled')\n ? config.dynamicTokensEnabled // assumes end user provides the correct config value/type\n : DEFAULT_PARSER_CONFIG.dynamicTokensEnabled\n this.maxLookahead = has(config, 'maxLookahead')\n ? config.maxLookahead // assumes end user provides the correct config value/type\n : DEFAULT_PARSER_CONFIG.maxLookahead\n this.lookaheadStrategy = has(config, 'lookaheadStrategy')\n ? config.lookaheadStrategy // assumes end user provides the correct config value/type\n : new LLkLookaheadStrategy({ maxLookahead: this.maxLookahead })\n this.lookAheadFuncsCache = new Map()\n }\n preComputeLookaheadFunctions(rules) {\n forEach(rules, (currRule) => {\n this.TRACE_INIT(`${currRule.name} Rule Lookahead`, () => {\n const {\n alternation,\n repetition,\n option,\n repetitionMandatory,\n repetitionMandatoryWithSeparator,\n repetitionWithSeparator,\n } = collectMethods(currRule)\n forEach(alternation, (currProd) => {\n const prodIdx = currProd.idx === 0 ? '' : currProd.idx\n this.TRACE_INIT(`${getProductionDslName(currProd)}${prodIdx}`, () => {\n const laFunc = this.lookaheadStrategy.buildLookaheadForAlternation({\n prodOccurrence: currProd.idx,\n rule: currRule,\n maxLookahead: currProd.maxLookahead || this.maxLookahead,\n hasPredicates: currProd.hasPredicates,\n dynamicTokensEnabled: this.dynamicTokensEnabled,\n })\n const key = getKeyForAutomaticLookahead(this.fullRuleNameToShort[currRule.name], OR_IDX, currProd.idx)\n this.setLaFuncCache(key, laFunc)\n })\n })\n forEach(repetition, (currProd) => {\n this.computeLookaheadFunc(\n currRule,\n currProd.idx,\n MANY_IDX,\n 'Repetition',\n currProd.maxLookahead,\n getProductionDslName(currProd),\n )\n })\n forEach(option, (currProd) => {\n this.computeLookaheadFunc(\n currRule,\n currProd.idx,\n OPTION_IDX,\n 'Option',\n currProd.maxLookahead,\n getProductionDslName(currProd),\n )\n })\n forEach(repetitionMandatory, (currProd) => {\n this.computeLookaheadFunc(\n currRule,\n currProd.idx,\n AT_LEAST_ONE_IDX,\n 'RepetitionMandatory',\n currProd.maxLookahead,\n getProductionDslName(currProd),\n )\n })\n forEach(repetitionMandatoryWithSeparator, (currProd) => {\n this.computeLookaheadFunc(\n currRule,\n currProd.idx,\n AT_LEAST_ONE_SEP_IDX,\n 'RepetitionMandatoryWithSeparator',\n currProd.maxLookahead,\n getProductionDslName(currProd),\n )\n })\n forEach(repetitionWithSeparator, (currProd) => {\n this.computeLookaheadFunc(\n currRule,\n currProd.idx,\n MANY_SEP_IDX,\n 'RepetitionWithSeparator',\n currProd.maxLookahead,\n getProductionDslName(currProd),\n )\n })\n })\n })\n }\n computeLookaheadFunc(rule, prodOccurrence, prodKey, prodType, prodMaxLookahead, dslMethodName) {\n this.TRACE_INIT(`${dslMethodName}${prodOccurrence === 0 ? '' : prodOccurrence}`, () => {\n const laFunc = this.lookaheadStrategy.buildLookaheadForOptional({\n prodOccurrence,\n rule,\n maxLookahead: prodMaxLookahead || this.maxLookahead,\n dynamicTokensEnabled: this.dynamicTokensEnabled,\n prodType,\n })\n const key = getKeyForAutomaticLookahead(this.fullRuleNameToShort[rule.name], prodKey, prodOccurrence)\n this.setLaFuncCache(key, laFunc)\n })\n }\n // this actually returns a number, but it is always used as a string (object prop key)\n getKeyForAutomaticLookahead(dslMethodIdx, occurrence) {\n const currRuleShortName = this.getLastExplicitRuleShortName()\n return getKeyForAutomaticLookahead(currRuleShortName, dslMethodIdx, occurrence)\n }\n getLaFuncFromCache(key) {\n return this.lookAheadFuncsCache.get(key)\n }\n /* istanbul ignore next */\n setLaFuncCache(key, value) {\n this.lookAheadFuncsCache.set(key, value)\n }\n }\n class DslMethodsCollectorVisitor extends GAstVisitor {\n constructor() {\n super(...arguments)\n this.dslMethods = {\n option: [],\n alternation: [],\n repetition: [],\n repetitionWithSeparator: [],\n repetitionMandatory: [],\n repetitionMandatoryWithSeparator: [],\n }\n }\n reset() {\n this.dslMethods = {\n option: [],\n alternation: [],\n repetition: [],\n repetitionWithSeparator: [],\n repetitionMandatory: [],\n repetitionMandatoryWithSeparator: [],\n }\n }\n visitOption(option) {\n this.dslMethods.option.push(option)\n }\n visitRepetitionWithSeparator(manySep) {\n this.dslMethods.repetitionWithSeparator.push(manySep)\n }\n visitRepetitionMandatory(atLeastOne) {\n this.dslMethods.repetitionMandatory.push(atLeastOne)\n }\n visitRepetitionMandatoryWithSeparator(atLeastOneSep) {\n this.dslMethods.repetitionMandatoryWithSeparator.push(atLeastOneSep)\n }\n visitRepetition(many) {\n this.dslMethods.repetition.push(many)\n }\n visitAlternation(or) {\n this.dslMethods.alternation.push(or)\n }\n }\n const collectorVisitor = new DslMethodsCollectorVisitor()\n function collectMethods(rule) {\n collectorVisitor.reset()\n rule.accept(collectorVisitor)\n const dslMethods = collectorVisitor.dslMethods\n // avoid uncleaned references\n collectorVisitor.reset()\n return dslMethods\n }\n\n /**\n * This nodeLocation tracking is not efficient and should only be used\n * when error recovery is enabled or the Token Vector contains virtual Tokens\n * (e.g, Python Indent/Outdent)\n * As it executes the calculation for every single terminal/nonTerminal\n * and does not rely on the fact the token vector is **sorted**\n */\n function setNodeLocationOnlyOffset(currNodeLocation, newLocationInfo) {\n // First (valid) update for this cst node\n if (isNaN(currNodeLocation.startOffset) === true) {\n // assumption1: Token location information is either NaN or a valid number\n // assumption2: Token location information is fully valid if it exist\n // (both start/end offsets exist and are numbers).\n currNodeLocation.startOffset = newLocationInfo.startOffset\n currNodeLocation.endOffset = newLocationInfo.endOffset\n }\n // Once the startOffset has been updated with a valid number it should never receive\n // any farther updates as the Token vector is sorted.\n // We still have to check this this condition for every new possible location info\n // because with error recovery enabled we may encounter invalid tokens (NaN location props)\n else if (currNodeLocation.endOffset < newLocationInfo.endOffset === true) {\n currNodeLocation.endOffset = newLocationInfo.endOffset\n }\n }\n /**\n * This nodeLocation tracking is not efficient and should only be used\n * when error recovery is enabled or the Token Vector contains virtual Tokens\n * (e.g, Python Indent/Outdent)\n * As it executes the calculation for every single terminal/nonTerminal\n * and does not rely on the fact the token vector is **sorted**\n */\n function setNodeLocationFull(currNodeLocation, newLocationInfo) {\n // First (valid) update for this cst node\n if (isNaN(currNodeLocation.startOffset) === true) {\n // assumption1: Token location information is either NaN or a valid number\n // assumption2: Token location information is fully valid if it exist\n // (all start/end props exist and are numbers).\n currNodeLocation.startOffset = newLocationInfo.startOffset\n currNodeLocation.startColumn = newLocationInfo.startColumn\n currNodeLocation.startLine = newLocationInfo.startLine\n currNodeLocation.endOffset = newLocationInfo.endOffset\n currNodeLocation.endColumn = newLocationInfo.endColumn\n currNodeLocation.endLine = newLocationInfo.endLine\n }\n // Once the start props has been updated with a valid number it should never receive\n // any farther updates as the Token vector is sorted.\n // We still have to check this this condition for every new possible location info\n // because with error recovery enabled we may encounter invalid tokens (NaN location props)\n else if (currNodeLocation.endOffset < newLocationInfo.endOffset === true) {\n currNodeLocation.endOffset = newLocationInfo.endOffset\n currNodeLocation.endColumn = newLocationInfo.endColumn\n currNodeLocation.endLine = newLocationInfo.endLine\n }\n }\n function addTerminalToCst(node, token, tokenTypeName) {\n if (node.children[tokenTypeName] === undefined) {\n node.children[tokenTypeName] = [token]\n } else {\n node.children[tokenTypeName].push(token)\n }\n }\n function addNoneTerminalToCst(node, ruleName, ruleResult) {\n if (node.children[ruleName] === undefined) {\n node.children[ruleName] = [ruleResult]\n } else {\n node.children[ruleName].push(ruleResult)\n }\n }\n\n const NAME = 'name'\n function defineNameProp(obj, nameValue) {\n Object.defineProperty(obj, NAME, {\n enumerable: false,\n configurable: true,\n writable: false,\n value: nameValue,\n })\n }\n\n function defaultVisit(ctx, param) {\n const childrenNames = keys(ctx)\n const childrenNamesLength = childrenNames.length\n for (let i = 0; i < childrenNamesLength; i++) {\n const currChildName = childrenNames[i]\n const currChildArray = ctx[currChildName]\n const currChildArrayLength = currChildArray.length\n for (let j = 0; j < currChildArrayLength; j++) {\n const currChild = currChildArray[j]\n // distinction between Tokens Children and CstNode children\n if (currChild.tokenTypeIdx === undefined) {\n this[currChild.name](currChild.children, param)\n }\n }\n }\n // defaultVisit does not support generic out param\n }\n function createBaseSemanticVisitorConstructor(grammarName, ruleNames) {\n const derivedConstructor = function () {}\n // can be overwritten according to:\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/\n // name?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FGlobal_Objects%2FFunction%2Fname\n defineNameProp(derivedConstructor, grammarName + 'BaseSemantics')\n const semanticProto = {\n visit: function (cstNode, param) {\n // enables writing more concise visitor methods when CstNode has only a single child\n if (isArray$1(cstNode)) {\n // A CST Node's children dictionary can never have empty arrays as values\n // If a key is defined there will be at least one element in the corresponding value array.\n cstNode = cstNode[0]\n }\n // enables passing optional CstNodes concisely.\n if (isUndefined(cstNode)) {\n return undefined\n }\n return this[cstNode.name](cstNode.children, param)\n },\n validateVisitor: function () {\n const semanticDefinitionErrors = validateVisitor(this, ruleNames)\n if (!isEmpty(semanticDefinitionErrors)) {\n const errorMessages = map(semanticDefinitionErrors, (currDefError) => currDefError.msg)\n throw Error(\n `Errors Detected in CST Visitor <${this.constructor.name}>:\\n\\t` +\n `${errorMessages.join('\\n\\n').replace(/\\n/g, '\\n\\t')}`,\n )\n }\n },\n }\n derivedConstructor.prototype = semanticProto\n derivedConstructor.prototype.constructor = derivedConstructor\n derivedConstructor._RULE_NAMES = ruleNames\n return derivedConstructor\n }\n function createBaseVisitorConstructorWithDefaults(grammarName, ruleNames, baseConstructor) {\n const derivedConstructor = function () {}\n // can be overwritten according to:\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/\n // name?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FGlobal_Objects%2FFunction%2Fname\n defineNameProp(derivedConstructor, grammarName + 'BaseSemanticsWithDefaults')\n const withDefaultsProto = Object.create(baseConstructor.prototype)\n forEach(ruleNames, (ruleName) => {\n withDefaultsProto[ruleName] = defaultVisit\n })\n derivedConstructor.prototype = withDefaultsProto\n derivedConstructor.prototype.constructor = derivedConstructor\n return derivedConstructor\n }\n var CstVisitorDefinitionError\n ;(function (CstVisitorDefinitionError) {\n CstVisitorDefinitionError[(CstVisitorDefinitionError['REDUNDANT_METHOD'] = 0)] = 'REDUNDANT_METHOD'\n CstVisitorDefinitionError[(CstVisitorDefinitionError['MISSING_METHOD'] = 1)] = 'MISSING_METHOD'\n })(CstVisitorDefinitionError || (CstVisitorDefinitionError = {}))\n function validateVisitor(visitorInstance, ruleNames) {\n const missingErrors = validateMissingCstMethods(visitorInstance, ruleNames)\n return missingErrors\n }\n function validateMissingCstMethods(visitorInstance, ruleNames) {\n const missingRuleNames = filter(ruleNames, (currRuleName) => {\n return isFunction(visitorInstance[currRuleName]) === false\n })\n const errors = map(missingRuleNames, (currRuleName) => {\n return {\n msg: `Missing visitor method: <${currRuleName}> on ${visitorInstance.constructor.name} CST Visitor.`,\n type: CstVisitorDefinitionError.MISSING_METHOD,\n methodName: currRuleName,\n }\n })\n return compact(errors)\n }\n\n /**\n * This trait is responsible for the CST building logic.\n */\n class TreeBuilder {\n initTreeBuilder(config) {\n this.CST_STACK = []\n // outputCst is no longer exposed/defined in the pubic API\n this.outputCst = config.outputCst\n this.nodeLocationTracking = has(config, 'nodeLocationTracking')\n ? config.nodeLocationTracking // assumes end user provides the correct config value/type\n : DEFAULT_PARSER_CONFIG.nodeLocationTracking\n if (!this.outputCst) {\n this.cstInvocationStateUpdate = noop\n this.cstFinallyStateUpdate = noop\n this.cstPostTerminal = noop\n this.cstPostNonTerminal = noop\n this.cstPostRule = noop\n } else {\n if (/full/i.test(this.nodeLocationTracking)) {\n if (this.recoveryEnabled) {\n this.setNodeLocationFromToken = setNodeLocationFull\n this.setNodeLocationFromNode = setNodeLocationFull\n this.cstPostRule = noop\n this.setInitialNodeLocation = this.setInitialNodeLocationFullRecovery\n } else {\n this.setNodeLocationFromToken = noop\n this.setNodeLocationFromNode = noop\n this.cstPostRule = this.cstPostRuleFull\n this.setInitialNodeLocation = this.setInitialNodeLocationFullRegular\n }\n } else if (/onlyOffset/i.test(this.nodeLocationTracking)) {\n if (this.recoveryEnabled) {\n this.setNodeLocationFromToken = setNodeLocationOnlyOffset\n this.setNodeLocationFromNode = setNodeLocationOnlyOffset\n this.cstPostRule = noop\n this.setInitialNodeLocation = this.setInitialNodeLocationOnlyOffsetRecovery\n } else {\n this.setNodeLocationFromToken = noop\n this.setNodeLocationFromNode = noop\n this.cstPostRule = this.cstPostRuleOnlyOffset\n this.setInitialNodeLocation = this.setInitialNodeLocationOnlyOffsetRegular\n }\n } else if (/none/i.test(this.nodeLocationTracking)) {\n this.setNodeLocationFromToken = noop\n this.setNodeLocationFromNode = noop\n this.cstPostRule = noop\n this.setInitialNodeLocation = noop\n } else {\n throw Error(`Invalid <nodeLocationTracking> config option: \"${config.nodeLocationTracking}\"`)\n }\n }\n }\n setInitialNodeLocationOnlyOffsetRecovery(cstNode) {\n cstNode.location = {\n startOffset: NaN,\n endOffset: NaN,\n }\n }\n setInitialNodeLocationOnlyOffsetRegular(cstNode) {\n cstNode.location = {\n // without error recovery the starting Location of a new CstNode is guaranteed\n // To be the next Token's startOffset (for valid inputs).\n // For invalid inputs there won't be any CSTOutput so this potential\n // inaccuracy does not matter\n startOffset: this.LA(1).startOffset,\n endOffset: NaN,\n }\n }\n setInitialNodeLocationFullRecovery(cstNode) {\n cstNode.location = {\n startOffset: NaN,\n startLine: NaN,\n startColumn: NaN,\n endOffset: NaN,\n endLine: NaN,\n endColumn: NaN,\n }\n }\n /**\n * @see setInitialNodeLocationOnlyOffsetRegular for explanation why this work\n \n * @param cstNode\n */\n setInitialNodeLocationFullRegular(cstNode) {\n const nextToken = this.LA(1)\n cstNode.location = {\n startOffset: nextToken.startOffset,\n startLine: nextToken.startLine,\n startColumn: nextToken.startColumn,\n endOffset: NaN,\n endLine: NaN,\n endColumn: NaN,\n }\n }\n cstInvocationStateUpdate(fullRuleName) {\n const cstNode = {\n name: fullRuleName,\n children: Object.create(null),\n }\n this.setInitialNodeLocation(cstNode)\n this.CST_STACK.push(cstNode)\n }\n cstFinallyStateUpdate() {\n this.CST_STACK.pop()\n }\n cstPostRuleFull(ruleCstNode) {\n // casts to `required<CstNodeLocation>` are safe because `cstPostRuleFull` should only be invoked when full location is enabled\n const prevToken = this.LA(0)\n const loc = ruleCstNode.location\n // If this condition is true it means we consumed at least one Token\n // In this CstNode.\n if (loc.startOffset <= prevToken.startOffset === true) {\n loc.endOffset = prevToken.endOffset\n loc.endLine = prevToken.endLine\n loc.endColumn = prevToken.endColumn\n }\n // \"empty\" CstNode edge case\n else {\n loc.startOffset = NaN\n loc.startLine = NaN\n loc.startColumn = NaN\n }\n }\n cstPostRuleOnlyOffset(ruleCstNode) {\n const prevToken = this.LA(0)\n // `location' is not null because `cstPostRuleOnlyOffset` will only be invoked when location tracking is enabled.\n const loc = ruleCstNode.location\n // If this condition is true it means we consumed at least one Token\n // In this CstNode.\n if (loc.startOffset <= prevToken.startOffset === true) {\n loc.endOffset = prevToken.endOffset\n }\n // \"empty\" CstNode edge case\n else {\n loc.startOffset = NaN\n }\n }\n cstPostTerminal(key, consumedToken) {\n const rootCst = this.CST_STACK[this.CST_STACK.length - 1]\n addTerminalToCst(rootCst, consumedToken, key)\n // This is only used when **both** error recovery and CST Output are enabled.\n this.setNodeLocationFromToken(rootCst.location, consumedToken)\n }\n cstPostNonTerminal(ruleCstResult, ruleName) {\n const preCstNode = this.CST_STACK[this.CST_STACK.length - 1]\n addNoneTerminalToCst(preCstNode, ruleName, ruleCstResult)\n // This is only used when **both** error recovery and CST Output are enabled.\n this.setNodeLocationFromNode(preCstNode.location, ruleCstResult.location)\n }\n getBaseCstVisitorConstructor() {\n if (isUndefined(this.baseCstVisitorConstructor)) {\n const newBaseCstVisitorConstructor = createBaseSemanticVisitorConstructor(\n this.className,\n keys(this.gastProductionsCache),\n )\n this.baseCstVisitorConstructor = newBaseCstVisitorConstructor\n return newBaseCstVisitorConstructor\n }\n return this.baseCstVisitorConstructor\n }\n getBaseCstVisitorConstructorWithDefaults() {\n if (isUndefined(this.baseCstVisitorWithDefaultsConstructor)) {\n const newConstructor = createBaseVisitorConstructorWithDefaults(\n this.className,\n keys(this.gastProductionsCache),\n this.getBaseCstVisitorConstructor(),\n )\n this.baseCstVisitorWithDefaultsConstructor = newConstructor\n return newConstructor\n }\n return this.baseCstVisitorWithDefaultsConstructor\n }\n getLastExplicitRuleShortName() {\n const ruleStack = this.RULE_STACK\n return ruleStack[ruleStack.length - 1]\n }\n getPreviousExplicitRuleShortName() {\n const ruleStack = this.RULE_STACK\n return ruleStack[ruleStack.length - 2]\n }\n getLastExplicitRuleOccurrenceIndex() {\n const occurrenceStack = this.RULE_OCCURRENCE_STACK\n return occurrenceStack[occurrenceStack.length - 1]\n }\n }\n\n /**\n * Trait responsible abstracting over the interaction with Lexer output (Token vector).\n *\n * This could be generalized to support other kinds of lexers, e.g.\n * - Just in Time Lexing / Lexer-Less parsing.\n * - Streaming Lexer.\n */\n class LexerAdapter {\n initLexerAdapter() {\n this.tokVector = []\n this.tokVectorLength = 0\n this.currIdx = -1\n }\n set input(newInput) {\n // @ts-ignore - `this parameter` not supported in setters/getters\n // - https://www.typescriptlang.org/docs/handbook/functions.html#this-parameters\n if (this.selfAnalysisDone !== true) {\n throw Error(`Missing <performSelfAnalysis> invocation at the end of the Parser's constructor.`)\n }\n // @ts-ignore - `this parameter` not supported in setters/getters\n // - https://www.typescriptlang.org/docs/handbook/functions.html#this-parameters\n this.reset()\n this.tokVector = newInput\n this.tokVectorLength = newInput.length\n }\n get input() {\n return this.tokVector\n }\n // skips a token and returns the next token\n SKIP_TOKEN() {\n if (this.currIdx <= this.tokVector.length - 2) {\n this.consumeToken()\n return this.LA(1)\n } else {\n return END_OF_FILE\n }\n }\n // Lexer (accessing Token vector) related methods which can be overridden to implement lazy lexers\n // or lexers dependent on parser context.\n LA(howMuch) {\n const soughtIdx = this.currIdx + howMuch\n if (soughtIdx < 0 || this.tokVectorLength <= soughtIdx) {\n return END_OF_FILE\n } else {\n return this.tokVector[soughtIdx]\n }\n }\n consumeToken() {\n this.currIdx++\n }\n exportLexerState() {\n return this.currIdx\n }\n importLexerState(newState) {\n this.currIdx = newState\n }\n resetLexerState() {\n this.currIdx = -1\n }\n moveToTerminatedState() {\n this.currIdx = this.tokVector.length - 1\n }\n getLexerPosition() {\n return this.exportLexerState()\n }\n }\n\n /**\n * This trait is responsible for implementing the public API\n * for defining Chevrotain parsers, i.e:\n * - CONSUME\n * - RULE\n * - OPTION\n * - ...\n */\n class RecognizerApi {\n ACTION(impl) {\n return impl.call(this)\n }\n consume(idx, tokType, options) {\n return this.consumeInternal(tokType, idx, options)\n }\n subrule(idx, ruleToCall, options) {\n return this.subruleInternal(ruleToCall, idx, options)\n }\n option(idx, actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, idx)\n }\n or(idx, altsOrOpts) {\n return this.orInternal(altsOrOpts, idx)\n }\n many(idx, actionORMethodDef) {\n return this.manyInternal(idx, actionORMethodDef)\n }\n atLeastOne(idx, actionORMethodDef) {\n return this.atLeastOneInternal(idx, actionORMethodDef)\n }\n CONSUME(tokType, options) {\n return this.consumeInternal(tokType, 0, options)\n }\n CONSUME1(tokType, options) {\n return this.consumeInternal(tokType, 1, options)\n }\n CONSUME2(tokType, options) {\n return this.consumeInternal(tokType, 2, options)\n }\n CONSUME3(tokType, options) {\n return this.consumeInternal(tokType, 3, options)\n }\n CONSUME4(tokType, options) {\n return this.consumeInternal(tokType, 4, options)\n }\n CONSUME5(tokType, options) {\n return this.consumeInternal(tokType, 5, options)\n }\n CONSUME6(tokType, options) {\n return this.consumeInternal(tokType, 6, options)\n }\n CONSUME7(tokType, options) {\n return this.consumeInternal(tokType, 7, options)\n }\n CONSUME8(tokType, options) {\n return this.consumeInternal(tokType, 8, options)\n }\n CONSUME9(tokType, options) {\n return this.consumeInternal(tokType, 9, options)\n }\n SUBRULE(ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 0, options)\n }\n SUBRULE1(ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 1, options)\n }\n SUBRULE2(ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 2, options)\n }\n SUBRULE3(ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 3, options)\n }\n SUBRULE4(ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 4, options)\n }\n SUBRULE5(ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 5, options)\n }\n SUBRULE6(ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 6, options)\n }\n SUBRULE7(ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 7, options)\n }\n SUBRULE8(ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 8, options)\n }\n SUBRULE9(ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 9, options)\n }\n OPTION(actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 0)\n }\n OPTION1(actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 1)\n }\n OPTION2(actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 2)\n }\n OPTION3(actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 3)\n }\n OPTION4(actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 4)\n }\n OPTION5(actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 5)\n }\n OPTION6(actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 6)\n }\n OPTION7(actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 7)\n }\n OPTION8(actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 8)\n }\n OPTION9(actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 9)\n }\n OR(altsOrOpts) {\n return this.orInternal(altsOrOpts, 0)\n }\n OR1(altsOrOpts) {\n return this.orInternal(altsOrOpts, 1)\n }\n OR2(altsOrOpts) {\n return this.orInternal(altsOrOpts, 2)\n }\n OR3(altsOrOpts) {\n return this.orInternal(altsOrOpts, 3)\n }\n OR4(altsOrOpts) {\n return this.orInternal(altsOrOpts, 4)\n }\n OR5(altsOrOpts) {\n return this.orInternal(altsOrOpts, 5)\n }\n OR6(altsOrOpts) {\n return this.orInternal(altsOrOpts, 6)\n }\n OR7(altsOrOpts) {\n return this.orInternal(altsOrOpts, 7)\n }\n OR8(altsOrOpts) {\n return this.orInternal(altsOrOpts, 8)\n }\n OR9(altsOrOpts) {\n return this.orInternal(altsOrOpts, 9)\n }\n MANY(actionORMethodDef) {\n this.manyInternal(0, actionORMethodDef)\n }\n MANY1(actionORMethodDef) {\n this.manyInternal(1, actionORMethodDef)\n }\n MANY2(actionORMethodDef) {\n this.manyInternal(2, actionORMethodDef)\n }\n MANY3(actionORMethodDef) {\n this.manyInternal(3, actionORMethodDef)\n }\n MANY4(actionORMethodDef) {\n this.manyInternal(4, actionORMethodDef)\n }\n MANY5(actionORMethodDef) {\n this.manyInternal(5, actionORMethodDef)\n }\n MANY6(actionORMethodDef) {\n this.manyInternal(6, actionORMethodDef)\n }\n MANY7(actionORMethodDef) {\n this.manyInternal(7, actionORMethodDef)\n }\n MANY8(actionORMethodDef) {\n this.manyInternal(8, actionORMethodDef)\n }\n MANY9(actionORMethodDef) {\n this.manyInternal(9, actionORMethodDef)\n }\n MANY_SEP(options) {\n this.manySepFirstInternal(0, options)\n }\n MANY_SEP1(options) {\n this.manySepFirstInternal(1, options)\n }\n MANY_SEP2(options) {\n this.manySepFirstInternal(2, options)\n }\n MANY_SEP3(options) {\n this.manySepFirstInternal(3, options)\n }\n MANY_SEP4(options) {\n this.manySepFirstInternal(4, options)\n }\n MANY_SEP5(options) {\n this.manySepFirstInternal(5, options)\n }\n MANY_SEP6(options) {\n this.manySepFirstInternal(6, options)\n }\n MANY_SEP7(options) {\n this.manySepFirstInternal(7, options)\n }\n MANY_SEP8(options) {\n this.manySepFirstInternal(8, options)\n }\n MANY_SEP9(options) {\n this.manySepFirstInternal(9, options)\n }\n AT_LEAST_ONE(actionORMethodDef) {\n this.atLeastOneInternal(0, actionORMethodDef)\n }\n AT_LEAST_ONE1(actionORMethodDef) {\n return this.atLeastOneInternal(1, actionORMethodDef)\n }\n AT_LEAST_ONE2(actionORMethodDef) {\n this.atLeastOneInternal(2, actionORMethodDef)\n }\n AT_LEAST_ONE3(actionORMethodDef) {\n this.atLeastOneInternal(3, actionORMethodDef)\n }\n AT_LEAST_ONE4(actionORMethodDef) {\n this.atLeastOneInternal(4, actionORMethodDef)\n }\n AT_LEAST_ONE5(actionORMethodDef) {\n this.atLeastOneInternal(5, actionORMethodDef)\n }\n AT_LEAST_ONE6(actionORMethodDef) {\n this.atLeastOneInternal(6, actionORMethodDef)\n }\n AT_LEAST_ONE7(actionORMethodDef) {\n this.atLeastOneInternal(7, actionORMethodDef)\n }\n AT_LEAST_ONE8(actionORMethodDef) {\n this.atLeastOneInternal(8, actionORMethodDef)\n }\n AT_LEAST_ONE9(actionORMethodDef) {\n this.atLeastOneInternal(9, actionORMethodDef)\n }\n AT_LEAST_ONE_SEP(options) {\n this.atLeastOneSepFirstInternal(0, options)\n }\n AT_LEAST_ONE_SEP1(options) {\n this.atLeastOneSepFirstInternal(1, options)\n }\n AT_LEAST_ONE_SEP2(options) {\n this.atLeastOneSepFirstInternal(2, options)\n }\n AT_LEAST_ONE_SEP3(options) {\n this.atLeastOneSepFirstInternal(3, options)\n }\n AT_LEAST_ONE_SEP4(options) {\n this.atLeastOneSepFirstInternal(4, options)\n }\n AT_LEAST_ONE_SEP5(options) {\n this.atLeastOneSepFirstInternal(5, options)\n }\n AT_LEAST_ONE_SEP6(options) {\n this.atLeastOneSepFirstInternal(6, options)\n }\n AT_LEAST_ONE_SEP7(options) {\n this.atLeastOneSepFirstInternal(7, options)\n }\n AT_LEAST_ONE_SEP8(options) {\n this.atLeastOneSepFirstInternal(8, options)\n }\n AT_LEAST_ONE_SEP9(options) {\n this.atLeastOneSepFirstInternal(9, options)\n }\n RULE(name, implementation, config = DEFAULT_RULE_CONFIG) {\n if (includes(this.definedRulesNames, name)) {\n const errMsg = defaultGrammarValidatorErrorProvider.buildDuplicateRuleNameError({\n topLevelRule: name,\n grammarName: this.className,\n })\n const error = {\n message: errMsg,\n type: ParserDefinitionErrorType.DUPLICATE_RULE_NAME,\n ruleName: name,\n }\n this.definitionErrors.push(error)\n }\n this.definedRulesNames.push(name)\n const ruleImplementation = this.defineRule(name, implementation, config)\n this[name] = ruleImplementation\n return ruleImplementation\n }\n OVERRIDE_RULE(name, impl, config = DEFAULT_RULE_CONFIG) {\n const ruleErrors = validateRuleIsOverridden(name, this.definedRulesNames, this.className)\n this.definitionErrors = this.definitionErrors.concat(ruleErrors)\n const ruleImplementation = this.defineRule(name, impl, config)\n this[name] = ruleImplementation\n return ruleImplementation\n }\n BACKTRACK(grammarRule, args) {\n return function () {\n // save org state\n this.isBackTrackingStack.push(1)\n const orgState = this.saveRecogState()\n try {\n grammarRule.apply(this, args)\n // if no exception was thrown we have succeed parsing the rule.\n return true\n } catch (e) {\n if (isRecognitionException(e)) {\n return false\n } else {\n throw e\n }\n } finally {\n this.reloadRecogState(orgState)\n this.isBackTrackingStack.pop()\n }\n }\n }\n // GAST export APIs\n getGAstProductions() {\n return this.gastProductionsCache\n }\n getSerializedGastProductions() {\n return serializeGrammar(values(this.gastProductionsCache))\n }\n }\n\n /**\n * This trait is responsible for the runtime parsing engine\n * Used by the official API (recognizer_api.ts)\n */\n class RecognizerEngine {\n initRecognizerEngine(tokenVocabulary, config) {\n this.className = this.constructor.name\n // TODO: would using an ES6 Map or plain object be faster (CST building scenario)\n this.shortRuleNameToFull = {}\n this.fullRuleNameToShort = {}\n this.ruleShortNameIdx = 256\n this.tokenMatcher = tokenStructuredMatcherNoCategories\n this.subruleIdx = 0\n this.definedRulesNames = []\n this.tokensMap = {}\n this.isBackTrackingStack = []\n this.RULE_STACK = []\n this.RULE_OCCURRENCE_STACK = []\n this.gastProductionsCache = {}\n if (has(config, 'serializedGrammar')) {\n throw Error(\n \"The Parser's configuration can no longer contain a <serializedGrammar> property.\\n\" +\n '\\tSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0\\n' +\n '\\tFor Further details.',\n )\n }\n if (isArray$1(tokenVocabulary)) {\n // This only checks for Token vocabularies provided as arrays.\n // That is good enough because the main objective is to detect users of pre-V4.0 APIs\n // rather than all edge cases of empty Token vocabularies.\n if (isEmpty(tokenVocabulary)) {\n throw Error(\n 'A Token Vocabulary cannot be empty.\\n' +\n '\\tNote that the first argument for the parser constructor\\n' +\n '\\tis no longer a Token vector (since v4.0).',\n )\n }\n if (typeof tokenVocabulary[0].startOffset === 'number') {\n throw Error(\n 'The Parser constructor no longer accepts a token vector as the first argument.\\n' +\n '\\tSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0\\n' +\n '\\tFor Further details.',\n )\n }\n }\n if (isArray$1(tokenVocabulary)) {\n this.tokensMap = reduce(\n tokenVocabulary,\n (acc, tokType) => {\n acc[tokType.name] = tokType\n return acc\n },\n {},\n )\n } else if (has(tokenVocabulary, 'modes') && every(flatten(values(tokenVocabulary.modes)), isTokenType)) {\n const allTokenTypes = flatten(values(tokenVocabulary.modes))\n const uniqueTokens = uniq(allTokenTypes)\n this.tokensMap = reduce(\n uniqueTokens,\n (acc, tokType) => {\n acc[tokType.name] = tokType\n return acc\n },\n {},\n )\n } else if (isObject(tokenVocabulary)) {\n this.tokensMap = clone(tokenVocabulary)\n } else {\n throw new Error(\n '<tokensDictionary> argument must be An Array of Token constructors,' +\n ' A dictionary of Token constructors or an IMultiModeLexerDefinition',\n )\n }\n // always add EOF to the tokenNames -> constructors map. it is useful to assure all the input has been\n // parsed with a clear error message (\"expecting EOF but found ...\")\n this.tokensMap['EOF'] = EOF\n const allTokenTypes = has(tokenVocabulary, 'modes')\n ? flatten(values(tokenVocabulary.modes))\n : values(tokenVocabulary)\n const noTokenCategoriesUsed = every(allTokenTypes, (tokenConstructor) =>\n isEmpty(tokenConstructor.categoryMatches),\n )\n this.tokenMatcher = noTokenCategoriesUsed ? tokenStructuredMatcherNoCategories : tokenStructuredMatcher\n // Because ES2015+ syntax should be supported for creating Token classes\n // We cannot assume that the Token classes were created using the \"extendToken\" utilities\n // Therefore we must augment the Token classes both on Lexer initialization and on Parser initialization\n augmentTokenTypes(values(this.tokensMap))\n }\n defineRule(ruleName, impl, config) {\n if (this.selfAnalysisDone) {\n throw Error(\n `Grammar rule <${ruleName}> may not be defined after the 'performSelfAnalysis' method has been called'\\n` +\n `Make sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`,\n )\n }\n const resyncEnabled = has(config, 'resyncEnabled')\n ? config.resyncEnabled // assumes end user provides the correct config value/type\n : DEFAULT_RULE_CONFIG.resyncEnabled\n const recoveryValueFunc = has(config, 'recoveryValueFunc')\n ? config.recoveryValueFunc // assumes end user provides the correct config value/type\n : DEFAULT_RULE_CONFIG.recoveryValueFunc\n // performance optimization: Use small integers as keys for the longer human readable \"full\" rule names.\n // this greatly improves Map access time (as much as 8% for some performance benchmarks).\n const shortName = this.ruleShortNameIdx << (BITS_FOR_METHOD_TYPE + BITS_FOR_OCCURRENCE_IDX)\n this.ruleShortNameIdx++\n this.shortRuleNameToFull[shortName] = ruleName\n this.fullRuleNameToShort[ruleName] = shortName\n let invokeRuleWithTry\n // Micro optimization, only check the condition **once** on rule definition\n // instead of **every single** rule invocation.\n if (this.outputCst === true) {\n invokeRuleWithTry = function invokeRuleWithTry(...args) {\n try {\n this.ruleInvocationStateUpdate(shortName, ruleName, this.subruleIdx)\n impl.apply(this, args)\n const cst = this.CST_STACK[this.CST_STACK.length - 1]\n this.cstPostRule(cst)\n return cst\n } catch (e) {\n return this.invokeRuleCatch(e, resyncEnabled, recoveryValueFunc)\n } finally {\n this.ruleFinallyStateUpdate()\n }\n }\n } else {\n invokeRuleWithTry = function invokeRuleWithTryCst(...args) {\n try {\n this.ruleInvocationStateUpdate(shortName, ruleName, this.subruleIdx)\n return impl.apply(this, args)\n } catch (e) {\n return this.invokeRuleCatch(e, resyncEnabled, recoveryValueFunc)\n } finally {\n this.ruleFinallyStateUpdate()\n }\n }\n }\n const wrappedGrammarRule = Object.assign(invokeRuleWithTry, { ruleName, originalGrammarAction: impl })\n return wrappedGrammarRule\n }\n invokeRuleCatch(e, resyncEnabledConfig, recoveryValueFunc) {\n const isFirstInvokedRule = this.RULE_STACK.length === 1\n // note the reSync is always enabled for the first rule invocation, because we must always be able to\n // reSync with EOF and just output some INVALID ParseTree\n // during backtracking reSync recovery is disabled, otherwise we can't be certain the backtracking\n // path is really the most valid one\n const reSyncEnabled = resyncEnabledConfig && !this.isBackTracking() && this.recoveryEnabled\n if (isRecognitionException(e)) {\n const recogError = e\n if (reSyncEnabled) {\n const reSyncTokType = this.findReSyncTokenType()\n if (this.isInCurrentRuleReSyncSet(reSyncTokType)) {\n recogError.resyncedTokens = this.reSyncTo(reSyncTokType)\n if (this.outputCst) {\n const partialCstResult = this.CST_STACK[this.CST_STACK.length - 1]\n partialCstResult.recoveredNode = true\n return partialCstResult\n } else {\n return recoveryValueFunc(e)\n }\n } else {\n if (this.outputCst) {\n const partialCstResult = this.CST_STACK[this.CST_STACK.length - 1]\n partialCstResult.recoveredNode = true\n recogError.partialCstResult = partialCstResult\n }\n // to be handled Further up the call stack\n throw recogError\n }\n } else if (isFirstInvokedRule) {\n // otherwise a Redundant input error will be created as well and we cannot guarantee that this is indeed the case\n this.moveToTerminatedState()\n // the parser should never throw one of its own errors outside its flow.\n // even if error recovery is disabled\n return recoveryValueFunc(e)\n } else {\n // to be recovered Further up the call stack\n throw recogError\n }\n } else {\n // some other Error type which we don't know how to handle (for example a built in JavaScript Error)\n throw e\n }\n }\n // Implementation of parsing DSL\n optionInternal(actionORMethodDef, occurrence) {\n const key = this.getKeyForAutomaticLookahead(OPTION_IDX, occurrence)\n return this.optionInternalLogic(actionORMethodDef, occurrence, key)\n }\n optionInternalLogic(actionORMethodDef, occurrence, key) {\n let lookAheadFunc = this.getLaFuncFromCache(key)\n let action\n if (typeof actionORMethodDef !== 'function') {\n action = actionORMethodDef.DEF\n const predicate = actionORMethodDef.GATE\n // predicate present\n if (predicate !== undefined) {\n const orgLookaheadFunction = lookAheadFunc\n lookAheadFunc = () => {\n return predicate.call(this) && orgLookaheadFunction.call(this)\n }\n }\n } else {\n action = actionORMethodDef\n }\n if (lookAheadFunc.call(this) === true) {\n return action.call(this)\n }\n return undefined\n }\n atLeastOneInternal(prodOccurrence, actionORMethodDef) {\n const laKey = this.getKeyForAutomaticLookahead(AT_LEAST_ONE_IDX, prodOccurrence)\n return this.atLeastOneInternalLogic(prodOccurrence, actionORMethodDef, laKey)\n }\n atLeastOneInternalLogic(prodOccurrence, actionORMethodDef, key) {\n let lookAheadFunc = this.getLaFuncFromCache(key)\n let action\n if (typeof actionORMethodDef !== 'function') {\n action = actionORMethodDef.DEF\n const predicate = actionORMethodDef.GATE\n // predicate present\n if (predicate !== undefined) {\n const orgLookaheadFunction = lookAheadFunc\n lookAheadFunc = () => {\n return predicate.call(this) && orgLookaheadFunction.call(this)\n }\n }\n } else {\n action = actionORMethodDef\n }\n if (lookAheadFunc.call(this) === true) {\n let notStuck = this.doSingleRepetition(action)\n while (lookAheadFunc.call(this) === true && notStuck === true) {\n notStuck = this.doSingleRepetition(action)\n }\n } else {\n throw this.raiseEarlyExitException(prodOccurrence, PROD_TYPE.REPETITION_MANDATORY, actionORMethodDef.ERR_MSG)\n }\n // note that while it may seem that this can cause an error because by using a recursive call to\n // AT_LEAST_ONE we change the grammar to AT_LEAST_TWO, AT_LEAST_THREE ... , the possible recursive call\n // from the tryInRepetitionRecovery(...) will only happen IFF there really are TWO/THREE/.... items.\n // Performance optimization: \"attemptInRepetitionRecovery\" will be defined as NOOP unless recovery is enabled\n this.attemptInRepetitionRecovery(\n this.atLeastOneInternal,\n [prodOccurrence, actionORMethodDef],\n lookAheadFunc,\n AT_LEAST_ONE_IDX,\n prodOccurrence,\n NextTerminalAfterAtLeastOneWalker,\n )\n }\n atLeastOneSepFirstInternal(prodOccurrence, options) {\n const laKey = this.getKeyForAutomaticLookahead(AT_LEAST_ONE_SEP_IDX, prodOccurrence)\n this.atLeastOneSepFirstInternalLogic(prodOccurrence, options, laKey)\n }\n atLeastOneSepFirstInternalLogic(prodOccurrence, options, key) {\n const action = options.DEF\n const separator = options.SEP\n const firstIterationLookaheadFunc = this.getLaFuncFromCache(key)\n // 1st iteration\n if (firstIterationLookaheadFunc.call(this) === true) {\n action.call(this)\n // TODO: Optimization can move this function construction into \"attemptInRepetitionRecovery\"\n // because it is only needed in error recovery scenarios.\n const separatorLookAheadFunc = () => {\n return this.tokenMatcher(this.LA(1), separator)\n }\n // 2nd..nth iterations\n while (this.tokenMatcher(this.LA(1), separator) === true) {\n // note that this CONSUME will never enter recovery because\n // the separatorLookAheadFunc checks that the separator really does exist.\n this.CONSUME(separator)\n // No need for checking infinite loop here due to consuming the separator.\n action.call(this)\n }\n // Performance optimization: \"attemptInRepetitionRecovery\" will be defined as NOOP unless recovery is enabled\n this.attemptInRepetitionRecovery(\n this.repetitionSepSecondInternal,\n [prodOccurrence, separator, separatorLookAheadFunc, action, NextTerminalAfterAtLeastOneSepWalker],\n separatorLookAheadFunc,\n AT_LEAST_ONE_SEP_IDX,\n prodOccurrence,\n NextTerminalAfterAtLeastOneSepWalker,\n )\n } else {\n throw this.raiseEarlyExitException(\n prodOccurrence,\n PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR,\n options.ERR_MSG,\n )\n }\n }\n manyInternal(prodOccurrence, actionORMethodDef) {\n const laKey = this.getKeyForAutomaticLookahead(MANY_IDX, prodOccurrence)\n return this.manyInternalLogic(prodOccurrence, actionORMethodDef, laKey)\n }\n manyInternalLogic(prodOccurrence, actionORMethodDef, key) {\n let lookaheadFunction = this.getLaFuncFromCache(key)\n let action\n if (typeof actionORMethodDef !== 'function') {\n action = actionORMethodDef.DEF\n const predicate = actionORMethodDef.GATE\n // predicate present\n if (predicate !== undefined) {\n const orgLookaheadFunction = lookaheadFunction\n lookaheadFunction = () => {\n return predicate.call(this) && orgLookaheadFunction.call(this)\n }\n }\n } else {\n action = actionORMethodDef\n }\n let notStuck = true\n while (lookaheadFunction.call(this) === true && notStuck === true) {\n notStuck = this.doSingleRepetition(action)\n }\n // Performance optimization: \"attemptInRepetitionRecovery\" will be defined as NOOP unless recovery is enabled\n this.attemptInRepetitionRecovery(\n this.manyInternal,\n [prodOccurrence, actionORMethodDef],\n lookaheadFunction,\n MANY_IDX,\n prodOccurrence,\n NextTerminalAfterManyWalker,\n // The notStuck parameter is only relevant when \"attemptInRepetitionRecovery\"\n // is invoked from manyInternal, in the MANY_SEP case and AT_LEAST_ONE[_SEP]\n // An infinite loop cannot occur as:\n // - Either the lookahead is guaranteed to consume something (Single Token Separator)\n // - AT_LEAST_ONE by definition is guaranteed to consume something (or error out).\n notStuck,\n )\n }\n manySepFirstInternal(prodOccurrence, options) {\n const laKey = this.getKeyForAutomaticLookahead(MANY_SEP_IDX, prodOccurrence)\n this.manySepFirstInternalLogic(prodOccurrence, options, laKey)\n }\n manySepFirstInternalLogic(prodOccurrence, options, key) {\n const action = options.DEF\n const separator = options.SEP\n const firstIterationLaFunc = this.getLaFuncFromCache(key)\n // 1st iteration\n if (firstIterationLaFunc.call(this) === true) {\n action.call(this)\n const separatorLookAheadFunc = () => {\n return this.tokenMatcher(this.LA(1), separator)\n }\n // 2nd..nth iterations\n while (this.tokenMatcher(this.LA(1), separator) === true) {\n // note that this CONSUME will never enter recovery because\n // the separatorLookAheadFunc checks that the separator really does exist.\n this.CONSUME(separator)\n // No need for checking infinite loop here due to consuming the separator.\n action.call(this)\n }\n // Performance optimization: \"attemptInRepetitionRecovery\" will be defined as NOOP unless recovery is enabled\n this.attemptInRepetitionRecovery(\n this.repetitionSepSecondInternal,\n [prodOccurrence, separator, separatorLookAheadFunc, action, NextTerminalAfterManySepWalker],\n separatorLookAheadFunc,\n MANY_SEP_IDX,\n prodOccurrence,\n NextTerminalAfterManySepWalker,\n )\n }\n }\n repetitionSepSecondInternal(prodOccurrence, separator, separatorLookAheadFunc, action, nextTerminalAfterWalker) {\n while (separatorLookAheadFunc()) {\n // note that this CONSUME will never enter recovery because\n // the separatorLookAheadFunc checks that the separator really does exist.\n this.CONSUME(separator)\n action.call(this)\n }\n // we can only arrive to this function after an error\n // has occurred (hence the name 'second') so the following\n // IF will always be entered, its possible to remove it...\n // however it is kept to avoid confusion and be consistent.\n // Performance optimization: \"attemptInRepetitionRecovery\" will be defined as NOOP unless recovery is enabled\n /* istanbul ignore else */\n this.attemptInRepetitionRecovery(\n this.repetitionSepSecondInternal,\n [prodOccurrence, separator, separatorLookAheadFunc, action, nextTerminalAfterWalker],\n separatorLookAheadFunc,\n AT_LEAST_ONE_SEP_IDX,\n prodOccurrence,\n nextTerminalAfterWalker,\n )\n }\n doSingleRepetition(action) {\n const beforeIteration = this.getLexerPosition()\n action.call(this)\n const afterIteration = this.getLexerPosition()\n // This boolean will indicate if this repetition progressed\n // or if we are \"stuck\" (potential infinite loop in the repetition).\n return afterIteration > beforeIteration\n }\n orInternal(altsOrOpts, occurrence) {\n const laKey = this.getKeyForAutomaticLookahead(OR_IDX, occurrence)\n const alts = isArray$1(altsOrOpts) ? altsOrOpts : altsOrOpts.DEF\n const laFunc = this.getLaFuncFromCache(laKey)\n const altIdxToTake = laFunc.call(this, alts)\n if (altIdxToTake !== undefined) {\n const chosenAlternative = alts[altIdxToTake]\n return chosenAlternative.ALT.call(this)\n }\n this.raiseNoAltException(occurrence, altsOrOpts.ERR_MSG)\n }\n ruleFinallyStateUpdate() {\n this.RULE_STACK.pop()\n this.RULE_OCCURRENCE_STACK.pop()\n // NOOP when cst is disabled\n this.cstFinallyStateUpdate()\n if (this.RULE_STACK.length === 0 && this.isAtEndOfInput() === false) {\n const firstRedundantTok = this.LA(1)\n const errMsg = this.errorMessageProvider.buildNotAllInputParsedMessage({\n firstRedundant: firstRedundantTok,\n ruleName: this.getCurrRuleFullName(),\n })\n this.SAVE_ERROR(new NotAllInputParsedException(errMsg, firstRedundantTok))\n }\n }\n subruleInternal(ruleToCall, idx, options) {\n let ruleResult\n try {\n const args = options !== undefined ? options.ARGS : undefined\n this.subruleIdx = idx\n ruleResult = ruleToCall.apply(this, args)\n this.cstPostNonTerminal(\n ruleResult,\n options !== undefined && options.LABEL !== undefined ? options.LABEL : ruleToCall.ruleName,\n )\n return ruleResult\n } catch (e) {\n throw this.subruleInternalError(e, options, ruleToCall.ruleName)\n }\n }\n subruleInternalError(e, options, ruleName) {\n if (isRecognitionException(e) && e.partialCstResult !== undefined) {\n this.cstPostNonTerminal(\n e.partialCstResult,\n options !== undefined && options.LABEL !== undefined ? options.LABEL : ruleName,\n )\n delete e.partialCstResult\n }\n throw e\n }\n consumeInternal(tokType, idx, options) {\n let consumedToken\n try {\n const nextToken = this.LA(1)\n if (this.tokenMatcher(nextToken, tokType) === true) {\n this.consumeToken()\n consumedToken = nextToken\n } else {\n this.consumeInternalError(tokType, nextToken, options)\n }\n } catch (eFromConsumption) {\n consumedToken = this.consumeInternalRecovery(tokType, idx, eFromConsumption)\n }\n this.cstPostTerminal(\n options !== undefined && options.LABEL !== undefined ? options.LABEL : tokType.name,\n consumedToken,\n )\n return consumedToken\n }\n consumeInternalError(tokType, nextToken, options) {\n let msg\n const previousToken = this.LA(0)\n if (options !== undefined && options.ERR_MSG) {\n msg = options.ERR_MSG\n } else {\n msg = this.errorMessageProvider.buildMismatchTokenMessage({\n expected: tokType,\n actual: nextToken,\n previous: previousToken,\n ruleName: this.getCurrRuleFullName(),\n })\n }\n throw this.SAVE_ERROR(new MismatchedTokenException(msg, nextToken, previousToken))\n }\n consumeInternalRecovery(tokType, idx, eFromConsumption) {\n // no recovery allowed during backtracking, otherwise backtracking may recover invalid syntax and accept it\n // but the original syntax could have been parsed successfully without any backtracking + recovery\n if (\n this.recoveryEnabled &&\n // TODO: more robust checking of the exception type. Perhaps Typescript extending expressions?\n eFromConsumption.name === 'MismatchedTokenException' &&\n !this.isBackTracking()\n ) {\n const follows = this.getFollowsForInRuleRecovery(tokType, idx)\n try {\n return this.tryInRuleRecovery(tokType, follows)\n } catch (eFromInRuleRecovery) {\n if (eFromInRuleRecovery.name === IN_RULE_RECOVERY_EXCEPTION) {\n // failed in RuleRecovery.\n // throw the original error in order to trigger reSync error recovery\n throw eFromConsumption\n } else {\n throw eFromInRuleRecovery\n }\n }\n } else {\n throw eFromConsumption\n }\n }\n saveRecogState() {\n // errors is a getter which will clone the errors array\n const savedErrors = this.errors\n const savedRuleStack = clone(this.RULE_STACK)\n return {\n errors: savedErrors,\n lexerState: this.exportLexerState(),\n RULE_STACK: savedRuleStack,\n CST_STACK: this.CST_STACK,\n }\n }\n reloadRecogState(newState) {\n this.errors = newState.errors\n this.importLexerState(newState.lexerState)\n this.RULE_STACK = newState.RULE_STACK\n }\n ruleInvocationStateUpdate(shortName, fullName, idxInCallingRule) {\n this.RULE_OCCURRENCE_STACK.push(idxInCallingRule)\n this.RULE_STACK.push(shortName)\n // NOOP when cst is disabled\n this.cstInvocationStateUpdate(fullName)\n }\n isBackTracking() {\n return this.isBackTrackingStack.length !== 0\n }\n getCurrRuleFullName() {\n const shortName = this.getLastExplicitRuleShortName()\n return this.shortRuleNameToFull[shortName]\n }\n shortRuleNameToFullName(shortName) {\n return this.shortRuleNameToFull[shortName]\n }\n isAtEndOfInput() {\n return this.tokenMatcher(this.LA(1), EOF)\n }\n reset() {\n this.resetLexerState()\n this.subruleIdx = 0\n this.isBackTrackingStack = []\n this.errors = []\n this.RULE_STACK = []\n // TODO: extract a specific reset for TreeBuilder trait\n this.CST_STACK = []\n this.RULE_OCCURRENCE_STACK = []\n }\n }\n\n /**\n * Trait responsible for runtime parsing errors.\n */\n class ErrorHandler {\n initErrorHandler(config) {\n this._errors = []\n this.errorMessageProvider = has(config, 'errorMessageProvider')\n ? config.errorMessageProvider // assumes end user provides the correct config value/type\n : DEFAULT_PARSER_CONFIG.errorMessageProvider\n }\n SAVE_ERROR(error) {\n if (isRecognitionException(error)) {\n error.context = {\n ruleStack: this.getHumanReadableRuleStack(),\n ruleOccurrenceStack: clone(this.RULE_OCCURRENCE_STACK),\n }\n this._errors.push(error)\n return error\n } else {\n throw Error('Trying to save an Error which is not a RecognitionException')\n }\n }\n get errors() {\n return clone(this._errors)\n }\n set errors(newErrors) {\n this._errors = newErrors\n }\n // TODO: consider caching the error message computed information\n raiseEarlyExitException(occurrence, prodType, userDefinedErrMsg) {\n const ruleName = this.getCurrRuleFullName()\n const ruleGrammar = this.getGAstProductions()[ruleName]\n const lookAheadPathsPerAlternative = getLookaheadPathsForOptionalProd(\n occurrence,\n ruleGrammar,\n prodType,\n this.maxLookahead,\n )\n const insideProdPaths = lookAheadPathsPerAlternative[0]\n const actualTokens = []\n for (let i = 1; i <= this.maxLookahead; i++) {\n actualTokens.push(this.LA(i))\n }\n const msg = this.errorMessageProvider.buildEarlyExitMessage({\n expectedIterationPaths: insideProdPaths,\n actual: actualTokens,\n previous: this.LA(0),\n customUserDescription: userDefinedErrMsg,\n ruleName: ruleName,\n })\n throw this.SAVE_ERROR(new EarlyExitException(msg, this.LA(1), this.LA(0)))\n }\n // TODO: consider caching the error message computed information\n raiseNoAltException(occurrence, errMsgTypes) {\n const ruleName = this.getCurrRuleFullName()\n const ruleGrammar = this.getGAstProductions()[ruleName]\n // TODO: getLookaheadPathsForOr can be slow for large enough maxLookahead and certain grammars, consider caching ?\n const lookAheadPathsPerAlternative = getLookaheadPathsForOr(occurrence, ruleGrammar, this.maxLookahead)\n const actualTokens = []\n for (let i = 1; i <= this.maxLookahead; i++) {\n actualTokens.push(this.LA(i))\n }\n const previousToken = this.LA(0)\n const errMsg = this.errorMessageProvider.buildNoViableAltMessage({\n expectedPathsPerAlt: lookAheadPathsPerAlternative,\n actual: actualTokens,\n previous: previousToken,\n customUserDescription: errMsgTypes,\n ruleName: this.getCurrRuleFullName(),\n })\n throw this.SAVE_ERROR(new NoViableAltException(errMsg, this.LA(1), previousToken))\n }\n }\n\n class ContentAssist {\n initContentAssist() {}\n computeContentAssist(startRuleName, precedingInput) {\n const startRuleGast = this.gastProductionsCache[startRuleName]\n if (isUndefined(startRuleGast)) {\n throw Error(`Rule ->${startRuleName}<- does not exist in this grammar.`)\n }\n return nextPossibleTokensAfter([startRuleGast], precedingInput, this.tokenMatcher, this.maxLookahead)\n }\n // TODO: should this be a member method or a utility? it does not have any state or usage of 'this'...\n // TODO: should this be more explicitly part of the public API?\n getNextPossibleTokenTypes(grammarPath) {\n const topRuleName = head(grammarPath.ruleStack)\n const gastProductions = this.getGAstProductions()\n const topProduction = gastProductions[topRuleName]\n const nextPossibleTokenTypes = new NextAfterTokenWalker(topProduction, grammarPath).startWalking()\n return nextPossibleTokenTypes\n }\n }\n\n const RECORDING_NULL_OBJECT = {\n description: 'This Object indicates the Parser is during Recording Phase',\n }\n Object.freeze(RECORDING_NULL_OBJECT)\n const HANDLE_SEPARATOR = true\n const MAX_METHOD_IDX = Math.pow(2, BITS_FOR_OCCURRENCE_IDX) - 1\n const RFT = createToken({ name: 'RECORDING_PHASE_TOKEN', pattern: Lexer.NA })\n augmentTokenTypes([RFT])\n const RECORDING_PHASE_TOKEN = createTokenInstance(\n RFT,\n 'This IToken indicates the Parser is in Recording Phase\\n\\t' +\n '' +\n 'See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details',\n // Using \"-1\" instead of NaN (as in EOF) because an actual number is less likely to\n // cause errors if the output of LA or CONSUME would be (incorrectly) used during the recording phase.\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n )\n Object.freeze(RECORDING_PHASE_TOKEN)\n const RECORDING_PHASE_CSTNODE = {\n name:\n 'This CSTNode indicates the Parser is in Recording Phase\\n\\t' +\n 'See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details',\n children: {},\n }\n /**\n * This trait handles the creation of the GAST structure for Chevrotain Grammars\n */\n class GastRecorder {\n initGastRecorder(config) {\n this.recordingProdStack = []\n this.RECORDING_PHASE = false\n }\n enableRecording() {\n this.RECORDING_PHASE = true\n this.TRACE_INIT('Enable Recording', () => {\n /**\n * Warning Dark Voodoo Magic upcoming!\n * We are \"replacing\" the public parsing DSL methods API\n * With **new** alternative implementations on the Parser **instance**\n *\n * So far this is the only way I've found to avoid performance regressions during parsing time.\n * - Approx 30% performance regression was measured on Chrome 75 Canary when attempting to replace the \"internal\"\n * implementations directly instead.\n */\n for (let i = 0; i < 10; i++) {\n const idx = i > 0 ? i : ''\n this[`CONSUME${idx}`] = function (arg1, arg2) {\n return this.consumeInternalRecord(arg1, i, arg2)\n }\n this[`SUBRULE${idx}`] = function (arg1, arg2) {\n return this.subruleInternalRecord(arg1, i, arg2)\n }\n this[`OPTION${idx}`] = function (arg1) {\n return this.optionInternalRecord(arg1, i)\n }\n this[`OR${idx}`] = function (arg1) {\n return this.orInternalRecord(arg1, i)\n }\n this[`MANY${idx}`] = function (arg1) {\n this.manyInternalRecord(i, arg1)\n }\n this[`MANY_SEP${idx}`] = function (arg1) {\n this.manySepFirstInternalRecord(i, arg1)\n }\n this[`AT_LEAST_ONE${idx}`] = function (arg1) {\n this.atLeastOneInternalRecord(i, arg1)\n }\n this[`AT_LEAST_ONE_SEP${idx}`] = function (arg1) {\n this.atLeastOneSepFirstInternalRecord(i, arg1)\n }\n }\n // DSL methods with the idx(suffix) as an argument\n this[`consume`] = function (idx, arg1, arg2) {\n return this.consumeInternalRecord(arg1, idx, arg2)\n }\n this[`subrule`] = function (idx, arg1, arg2) {\n return this.subruleInternalRecord(arg1, idx, arg2)\n }\n this[`option`] = function (idx, arg1) {\n return this.optionInternalRecord(arg1, idx)\n }\n this[`or`] = function (idx, arg1) {\n return this.orInternalRecord(arg1, idx)\n }\n this[`many`] = function (idx, arg1) {\n this.manyInternalRecord(idx, arg1)\n }\n this[`atLeastOne`] = function (idx, arg1) {\n this.atLeastOneInternalRecord(idx, arg1)\n }\n this.ACTION = this.ACTION_RECORD\n this.BACKTRACK = this.BACKTRACK_RECORD\n this.LA = this.LA_RECORD\n })\n }\n disableRecording() {\n this.RECORDING_PHASE = false\n // By deleting these **instance** properties, any future invocation\n // will be deferred to the original methods on the **prototype** object\n // This seems to get rid of any incorrect optimizations that V8 may\n // do during the recording phase.\n this.TRACE_INIT('Deleting Recording methods', () => {\n const that = this\n for (let i = 0; i < 10; i++) {\n const idx = i > 0 ? i : ''\n delete that[`CONSUME${idx}`]\n delete that[`SUBRULE${idx}`]\n delete that[`OPTION${idx}`]\n delete that[`OR${idx}`]\n delete that[`MANY${idx}`]\n delete that[`MANY_SEP${idx}`]\n delete that[`AT_LEAST_ONE${idx}`]\n delete that[`AT_LEAST_ONE_SEP${idx}`]\n }\n delete that[`consume`]\n delete that[`subrule`]\n delete that[`option`]\n delete that[`or`]\n delete that[`many`]\n delete that[`atLeastOne`]\n delete that.ACTION\n delete that.BACKTRACK\n delete that.LA\n })\n }\n // Parser methods are called inside an ACTION?\n // Maybe try/catch/finally on ACTIONS while disabling the recorders state changes?\n // @ts-expect-error -- noop place holder\n ACTION_RECORD(impl) {\n // NO-OP during recording\n }\n // Executing backtracking logic will break our recording logic assumptions\n BACKTRACK_RECORD(grammarRule, args) {\n return () => true\n }\n // LA is part of the official API and may be used for custom lookahead logic\n // by end users who may forget to wrap it in ACTION or inside a GATE\n LA_RECORD(howMuch) {\n // We cannot use the RECORD_PHASE_TOKEN here because someone may depend\n // On LA return EOF at the end of the input so an infinite loop may occur.\n return END_OF_FILE\n }\n topLevelRuleRecord(name, def) {\n try {\n const newTopLevelRule = new Rule({ definition: [], name: name })\n newTopLevelRule.name = name\n this.recordingProdStack.push(newTopLevelRule)\n def.call(this)\n this.recordingProdStack.pop()\n return newTopLevelRule\n } catch (originalError) {\n if (originalError.KNOWN_RECORDER_ERROR !== true) {\n try {\n originalError.message =\n originalError.message +\n '\\n\\t This error was thrown during the \"grammar recording phase\" For more info see:\\n\\t' +\n 'https://chevrotain.io/docs/guide/internals.html#grammar-recording'\n } catch (mutabilityError) {\n // We may not be able to modify the original error object\n throw originalError\n }\n }\n throw originalError\n }\n }\n // Implementation of parsing DSL\n optionInternalRecord(actionORMethodDef, occurrence) {\n return recordProd.call(this, Option, actionORMethodDef, occurrence)\n }\n atLeastOneInternalRecord(occurrence, actionORMethodDef) {\n recordProd.call(this, RepetitionMandatory, actionORMethodDef, occurrence)\n }\n atLeastOneSepFirstInternalRecord(occurrence, options) {\n recordProd.call(this, RepetitionMandatoryWithSeparator, options, occurrence, HANDLE_SEPARATOR)\n }\n manyInternalRecord(occurrence, actionORMethodDef) {\n recordProd.call(this, Repetition, actionORMethodDef, occurrence)\n }\n manySepFirstInternalRecord(occurrence, options) {\n recordProd.call(this, RepetitionWithSeparator, options, occurrence, HANDLE_SEPARATOR)\n }\n orInternalRecord(altsOrOpts, occurrence) {\n return recordOrProd.call(this, altsOrOpts, occurrence)\n }\n subruleInternalRecord(ruleToCall, occurrence, options) {\n assertMethodIdxIsValid(occurrence)\n if (!ruleToCall || has(ruleToCall, 'ruleName') === false) {\n const error = new Error(\n `<SUBRULE${getIdxSuffix(occurrence)}> argument is invalid` +\n ` expecting a Parser method reference but got: <${JSON.stringify(ruleToCall)}>` +\n `\\n inside top level rule: <${this.recordingProdStack[0].name}>`,\n )\n error.KNOWN_RECORDER_ERROR = true\n throw error\n }\n const prevProd = last(this.recordingProdStack)\n const ruleName = ruleToCall.ruleName\n const newNoneTerminal = new NonTerminal({\n idx: occurrence,\n nonTerminalName: ruleName,\n label: options === null || options === void 0 ? void 0 : options.LABEL,\n // The resolving of the `referencedRule` property will be done once all the Rule's GASTs have been created\n referencedRule: undefined,\n })\n prevProd.definition.push(newNoneTerminal)\n return this.outputCst ? RECORDING_PHASE_CSTNODE : RECORDING_NULL_OBJECT\n }\n consumeInternalRecord(tokType, occurrence, options) {\n assertMethodIdxIsValid(occurrence)\n if (!hasShortKeyProperty(tokType)) {\n const error = new Error(\n `<CONSUME${getIdxSuffix(occurrence)}> argument is invalid` +\n ` expecting a TokenType reference but got: <${JSON.stringify(tokType)}>` +\n `\\n inside top level rule: <${this.recordingProdStack[0].name}>`,\n )\n error.KNOWN_RECORDER_ERROR = true\n throw error\n }\n const prevProd = last(this.recordingProdStack)\n const newNoneTerminal = new Terminal({\n idx: occurrence,\n terminalType: tokType,\n label: options === null || options === void 0 ? void 0 : options.LABEL,\n })\n prevProd.definition.push(newNoneTerminal)\n return RECORDING_PHASE_TOKEN\n }\n }\n function recordProd(prodConstructor, mainProdArg, occurrence, handleSep = false) {\n assertMethodIdxIsValid(occurrence)\n const prevProd = last(this.recordingProdStack)\n const grammarAction = isFunction(mainProdArg) ? mainProdArg : mainProdArg.DEF\n const newProd = new prodConstructor({ definition: [], idx: occurrence })\n if (handleSep) {\n newProd.separator = mainProdArg.SEP\n }\n if (has(mainProdArg, 'MAX_LOOKAHEAD')) {\n newProd.maxLookahead = mainProdArg.MAX_LOOKAHEAD\n }\n this.recordingProdStack.push(newProd)\n grammarAction.call(this)\n prevProd.definition.push(newProd)\n this.recordingProdStack.pop()\n return RECORDING_NULL_OBJECT\n }\n function recordOrProd(mainProdArg, occurrence) {\n assertMethodIdxIsValid(occurrence)\n const prevProd = last(this.recordingProdStack)\n // Only an array of alternatives\n const hasOptions = isArray$1(mainProdArg) === false\n const alts = hasOptions === false ? mainProdArg : mainProdArg.DEF\n const newOrProd = new Alternation({\n definition: [],\n idx: occurrence,\n ignoreAmbiguities: hasOptions && mainProdArg.IGNORE_AMBIGUITIES === true,\n })\n if (has(mainProdArg, 'MAX_LOOKAHEAD')) {\n newOrProd.maxLookahead = mainProdArg.MAX_LOOKAHEAD\n }\n const hasPredicates = some(alts, (currAlt) => isFunction(currAlt.GATE))\n newOrProd.hasPredicates = hasPredicates\n prevProd.definition.push(newOrProd)\n forEach(alts, (currAlt) => {\n const currAltFlat = new Alternative({ definition: [] })\n newOrProd.definition.push(currAltFlat)\n if (has(currAlt, 'IGNORE_AMBIGUITIES')) {\n currAltFlat.ignoreAmbiguities = currAlt.IGNORE_AMBIGUITIES // assumes end user provides the correct config value/type\n }\n // **implicit** ignoreAmbiguities due to usage of gate\n else if (has(currAlt, 'GATE')) {\n currAltFlat.ignoreAmbiguities = true\n }\n this.recordingProdStack.push(currAltFlat)\n currAlt.ALT.call(this)\n this.recordingProdStack.pop()\n })\n return RECORDING_NULL_OBJECT\n }\n function getIdxSuffix(idx) {\n return idx === 0 ? '' : `${idx}`\n }\n function assertMethodIdxIsValid(idx) {\n if (idx < 0 || idx > MAX_METHOD_IDX) {\n const error = new Error(\n // The stack trace will contain all the needed details\n `Invalid DSL Method idx value: <${idx}>\\n\\t` +\n `Idx value must be a none negative value smaller than ${MAX_METHOD_IDX + 1}`,\n )\n error.KNOWN_RECORDER_ERROR = true\n throw error\n }\n }\n\n /**\n * Trait responsible for runtime parsing errors.\n */\n class PerformanceTracer {\n initPerformanceTracer(config) {\n if (has(config, 'traceInitPerf')) {\n const userTraceInitPerf = config.traceInitPerf\n const traceIsNumber = typeof userTraceInitPerf === 'number'\n this.traceInitMaxIdent = traceIsNumber ? userTraceInitPerf : Infinity\n this.traceInitPerf = traceIsNumber ? userTraceInitPerf > 0 : userTraceInitPerf // assumes end user provides the correct config value/type\n } else {\n this.traceInitMaxIdent = 0\n this.traceInitPerf = DEFAULT_PARSER_CONFIG.traceInitPerf\n }\n this.traceInitIndent = -1\n }\n TRACE_INIT(phaseDesc, phaseImpl) {\n // No need to optimize this using NOOP pattern because\n // It is not called in a hot spot...\n if (this.traceInitPerf === true) {\n this.traceInitIndent++\n const indent = new Array(this.traceInitIndent + 1).join('\\t')\n if (this.traceInitIndent < this.traceInitMaxIdent) {\n console.log(`${indent}--> <${phaseDesc}>`)\n }\n const { time, value } = timer(phaseImpl)\n /* istanbul ignore next - Difficult to reproduce specific performance behavior (>10ms) in tests */\n const traceMethod = time > 10 ? console.warn : console.log\n if (this.traceInitIndent < this.traceInitMaxIdent) {\n traceMethod(`${indent}<-- <${phaseDesc}> time: ${time}ms`)\n }\n this.traceInitIndent--\n return value\n } else {\n return phaseImpl()\n }\n }\n }\n\n function applyMixins(derivedCtor, baseCtors) {\n baseCtors.forEach((baseCtor) => {\n const baseProto = baseCtor.prototype\n Object.getOwnPropertyNames(baseProto).forEach((propName) => {\n if (propName === 'constructor') {\n return\n }\n const basePropDescriptor = Object.getOwnPropertyDescriptor(baseProto, propName)\n // Handle Accessors\n if (basePropDescriptor && (basePropDescriptor.get || basePropDescriptor.set)) {\n Object.defineProperty(derivedCtor.prototype, propName, basePropDescriptor)\n } else {\n derivedCtor.prototype[propName] = baseCtor.prototype[propName]\n }\n })\n })\n }\n\n const END_OF_FILE = createTokenInstance(EOF, '', NaN, NaN, NaN, NaN, NaN, NaN)\n Object.freeze(END_OF_FILE)\n const DEFAULT_PARSER_CONFIG = Object.freeze({\n recoveryEnabled: false,\n maxLookahead: 3,\n dynamicTokensEnabled: false,\n outputCst: true,\n errorMessageProvider: defaultParserErrorProvider,\n nodeLocationTracking: 'none',\n traceInitPerf: false,\n skipValidations: false,\n })\n const DEFAULT_RULE_CONFIG = Object.freeze({\n recoveryValueFunc: () => undefined,\n resyncEnabled: true,\n })\n var ParserDefinitionErrorType\n ;(function (ParserDefinitionErrorType) {\n ParserDefinitionErrorType[(ParserDefinitionErrorType['INVALID_RULE_NAME'] = 0)] = 'INVALID_RULE_NAME'\n ParserDefinitionErrorType[(ParserDefinitionErrorType['DUPLICATE_RULE_NAME'] = 1)] = 'DUPLICATE_RULE_NAME'\n ParserDefinitionErrorType[(ParserDefinitionErrorType['INVALID_RULE_OVERRIDE'] = 2)] = 'INVALID_RULE_OVERRIDE'\n ParserDefinitionErrorType[(ParserDefinitionErrorType['DUPLICATE_PRODUCTIONS'] = 3)] = 'DUPLICATE_PRODUCTIONS'\n ParserDefinitionErrorType[(ParserDefinitionErrorType['UNRESOLVED_SUBRULE_REF'] = 4)] = 'UNRESOLVED_SUBRULE_REF'\n ParserDefinitionErrorType[(ParserDefinitionErrorType['LEFT_RECURSION'] = 5)] = 'LEFT_RECURSION'\n ParserDefinitionErrorType[(ParserDefinitionErrorType['NONE_LAST_EMPTY_ALT'] = 6)] = 'NONE_LAST_EMPTY_ALT'\n ParserDefinitionErrorType[(ParserDefinitionErrorType['AMBIGUOUS_ALTS'] = 7)] = 'AMBIGUOUS_ALTS'\n ParserDefinitionErrorType[(ParserDefinitionErrorType['CONFLICT_TOKENS_RULES_NAMESPACE'] = 8)] =\n 'CONFLICT_TOKENS_RULES_NAMESPACE'\n ParserDefinitionErrorType[(ParserDefinitionErrorType['INVALID_TOKEN_NAME'] = 9)] = 'INVALID_TOKEN_NAME'\n ParserDefinitionErrorType[(ParserDefinitionErrorType['NO_NON_EMPTY_LOOKAHEAD'] = 10)] = 'NO_NON_EMPTY_LOOKAHEAD'\n ParserDefinitionErrorType[(ParserDefinitionErrorType['AMBIGUOUS_PREFIX_ALTS'] = 11)] = 'AMBIGUOUS_PREFIX_ALTS'\n ParserDefinitionErrorType[(ParserDefinitionErrorType['TOO_MANY_ALTS'] = 12)] = 'TOO_MANY_ALTS'\n ParserDefinitionErrorType[(ParserDefinitionErrorType['CUSTOM_LOOKAHEAD_VALIDATION'] = 13)] =\n 'CUSTOM_LOOKAHEAD_VALIDATION'\n })(ParserDefinitionErrorType || (ParserDefinitionErrorType = {}))\n class Parser {\n /**\n * @deprecated use the **instance** method with the same name instead\n */\n static performSelfAnalysis(parserInstance) {\n throw Error(\n 'The **static** `performSelfAnalysis` method has been deprecated.' +\n '\\t\\nUse the **instance** method with the same name instead.',\n )\n }\n performSelfAnalysis() {\n this.TRACE_INIT('performSelfAnalysis', () => {\n let defErrorsMsgs\n this.selfAnalysisDone = true\n const className = this.className\n this.TRACE_INIT('toFastProps', () => {\n // Without this voodoo magic the parser would be x3-x4 slower\n // It seems it is better to invoke `toFastProperties` **before**\n // Any manipulations of the `this` object done during the recording phase.\n toFastProperties(this)\n })\n this.TRACE_INIT('Grammar Recording', () => {\n try {\n this.enableRecording()\n // Building the GAST\n forEach(this.definedRulesNames, (currRuleName) => {\n const wrappedRule = this[currRuleName]\n const originalGrammarAction = wrappedRule['originalGrammarAction']\n let recordedRuleGast\n this.TRACE_INIT(`${currRuleName} Rule`, () => {\n recordedRuleGast = this.topLevelRuleRecord(currRuleName, originalGrammarAction)\n })\n this.gastProductionsCache[currRuleName] = recordedRuleGast\n })\n } finally {\n this.disableRecording()\n }\n })\n let resolverErrors = []\n this.TRACE_INIT('Grammar Resolving', () => {\n resolverErrors = resolveGrammar({\n rules: values(this.gastProductionsCache),\n })\n this.definitionErrors = this.definitionErrors.concat(resolverErrors)\n })\n this.TRACE_INIT('Grammar Validations', () => {\n // only perform additional grammar validations IFF no resolving errors have occurred.\n // as unresolved grammar may lead to unhandled runtime exceptions in the follow up validations.\n if (isEmpty(resolverErrors) && this.skipValidations === false) {\n const validationErrors = validateGrammar({\n rules: values(this.gastProductionsCache),\n tokenTypes: values(this.tokensMap),\n errMsgProvider: defaultGrammarValidatorErrorProvider,\n grammarName: className,\n })\n const lookaheadValidationErrors = validateLookahead({\n lookaheadStrategy: this.lookaheadStrategy,\n rules: values(this.gastProductionsCache),\n tokenTypes: values(this.tokensMap),\n grammarName: className,\n })\n this.definitionErrors = this.definitionErrors.concat(validationErrors, lookaheadValidationErrors)\n }\n })\n // this analysis may fail if the grammar is not perfectly valid\n if (isEmpty(this.definitionErrors)) {\n // The results of these computations are not needed unless error recovery is enabled.\n if (this.recoveryEnabled) {\n this.TRACE_INIT('computeAllProdsFollows', () => {\n const allFollows = computeAllProdsFollows(values(this.gastProductionsCache))\n this.resyncFollows = allFollows\n })\n }\n this.TRACE_INIT('ComputeLookaheadFunctions', () => {\n var _a, _b\n ;(_b = (_a = this.lookaheadStrategy).initialize) === null || _b === void 0\n ? void 0\n : _b.call(_a, {\n rules: values(this.gastProductionsCache),\n })\n this.preComputeLookaheadFunctions(values(this.gastProductionsCache))\n })\n }\n if (!Parser.DEFER_DEFINITION_ERRORS_HANDLING && !isEmpty(this.definitionErrors)) {\n defErrorsMsgs = map(this.definitionErrors, (defError) => defError.message)\n throw new Error(\n `Parser Definition Errors detected:\\n ${defErrorsMsgs.join('\\n-------------------------------\\n')}`,\n )\n }\n })\n }\n constructor(tokenVocabulary, config) {\n this.definitionErrors = []\n this.selfAnalysisDone = false\n const that = this\n that.initErrorHandler(config)\n that.initLexerAdapter()\n that.initLooksAhead(config)\n that.initRecognizerEngine(tokenVocabulary, config)\n that.initRecoverable(config)\n that.initTreeBuilder(config)\n that.initContentAssist()\n that.initGastRecorder(config)\n that.initPerformanceTracer(config)\n if (has(config, 'ignoredIssues')) {\n throw new Error(\n 'The <ignoredIssues> IParserConfig property has been deprecated.\\n\\t' +\n 'Please use the <IGNORE_AMBIGUITIES> flag on the relevant DSL method instead.\\n\\t' +\n 'See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES\\n\\t' +\n 'For further details.',\n )\n }\n this.skipValidations = has(config, 'skipValidations')\n ? config.skipValidations // casting assumes the end user passing the correct type\n : DEFAULT_PARSER_CONFIG.skipValidations\n }\n }\n // Set this flag to true if you don't want the Parser to throw error when problems in it's definition are detected.\n // (normally during the parser's constructor).\n // This is a design time flag, it will not affect the runtime error handling of the parser, just design time errors,\n // for example: duplicate rule names, referencing an unresolved subrule, ect...\n // This flag should not be enabled during normal usage, it is used in special situations, for example when\n // needing to display the parser definition errors in some GUI(online playground).\n Parser.DEFER_DEFINITION_ERRORS_HANDLING = false\n applyMixins(Parser, [\n Recoverable,\n LooksAhead,\n TreeBuilder,\n LexerAdapter,\n RecognizerEngine,\n RecognizerApi,\n ErrorHandler,\n ContentAssist,\n GastRecorder,\n PerformanceTracer,\n ])\n class CstParser extends Parser {\n constructor(tokenVocabulary, config = DEFAULT_PARSER_CONFIG) {\n const configClone = clone(config)\n configClone.outputCst = true\n super(tokenVocabulary, configClone)\n }\n }\n\n return { CstParser, Lexer, createToken }\n})()\n\nexport { CstParser, Lexer, createToken }\n"],"names":["map","values","key","othValue","collection","includes","Lexer","LexerDefinitionErrorType","msg","currConfig","createToken","getExtraProductionArgument","PROD_TYPE","tokenMatcher","keys","prefixKeys","collectorVisitor","CstVisitorDefinitionError","allTokenTypes","invokeRuleWithTry","ParserDefinitionErrorType","CstParser"],"mappings":"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"}
|