#!/usr/bin/env php †• psalm†8&%d†˜(’¤stubs/Php82.phpstubÙ8&%dÙÑiC¤stubs/Php80.phpstub;8&%d;2é¤stubs/extensions/soap.phpstub{+8&%d{+¹lØN¤stubs/extensions/apcu.phpstub8&%dâ”ͤ stubs/extensions/ibm_db2.phpstubÀ8&%dÀ—3^:¤stubs/extensions/redis.phpstub P8&%d P³dÞܤstubs/extensions/mysqli.phpstub]8&%d]3ð¸¤stubs/extensions/geos.phpstubÍ8&%dÍS„†¤ stubs/extensions/mongodb.phpstub°8&%d°G˜@¤stubs/extensions/pdo.phpstubë8&%dë+Úå/¤stubs/extensions/random.phpstubG 8&%dG Yf'ޤstubs/extensions/dom.phpstubÉ]8&%dÉ]Ln%r¤"stubs/extensions/simplexml.phpstub=8&%d=zÌÑ©¤stubs/extensions/ds.phpstub4c8&%d4cÅNQÙ¤stubs/extensions/gmp.phpstubä8&%d䨫rU¤stubs/extensions/ffi.phpstub$8&%d$GGâï¤stubs/extensions/xdebug.phpstub¦8&%d¦†¬Ȥ stubs/extensions/decimal.phpstubê@8&%dê@¼f.“¤"stubs/CoreImmutableClasses.phpstub8&%dlØÈ¤stubs/phpparser.phpstubÌ8&%dÌòëBä¤"stubs/CoreGenericIterators.phpstubÂj8&%dÂj‹bšd¤stubs/Reflection.phpstubx88&%dx8õÉú¤stubs/SPL.phpstubdi8&%ddi/GÄä¤ stubs/CoreGenericClasses.phpstub¡68&%d¡6×µý ¤stubs/Php81.phpstub 8&%d ¹­ïˆ¤"stubs/CoreGenericFunctions.phpstubŸ8&%dŸFª·¤ config.xsdMÇ8&%dMÇ“ßË8¤src/Psalm/FileManipulation.php8&%duN| ¤src/Psalm/CodeLocation.phpì-8&%dì-+é¤src/Psalm/Aliases.php’8&%d’‹²¤src/Psalm/Type.phpºl8&%dºl¡ššÑ¤(src/Psalm/Node/VirtualAttributeGroup.phpÒ8&%dÒ\n:¤src/Psalm/Node/VirtualConst.php¹8&%d¹-P¨¤-src/Psalm/Node/Name/VirtualFullyQualified.phpì8&%dì9'ë¤'src/Psalm/Node/Name/VirtualRelative.phpÚ8&%dÚ5Ù¤+src/Psalm/Node/VirtualVarLikeIdentifier.php8&%do¾u¤#src/Psalm/Node/VirtualUnionType.phpÃ8&%dà nFi¤src/Psalm/Node/VirtualParam.php·8&%d·V¼ò¤'src/Psalm/Node/Scalar/VirtualString.phpÚ8&%dÚ‘?¤(src/Psalm/Node/Scalar/VirtualDNumber.phpÛ8&%dÛêG¤3src/Psalm/Node/Scalar/VirtualEncapsedStringPart.phpü8&%dü‡“=¤)src/Psalm/Node/Scalar/VirtualEncapsed.phpÞ8&%dÞ„QÞ¤0src/Psalm/Node/Scalar/MagicConst/VirtualFile.phpè8&%dèkvϤ/src/Psalm/Node/Scalar/MagicConst/VirtualDir.phpå8&%dåHÉŸ¤4src/Psalm/Node/Scalar/MagicConst/VirtualFunction.phpö8&%döD£¤5src/Psalm/Node/Scalar/MagicConst/VirtualNamespace.phpù8&%dùt½Z*¤0src/Psalm/Node/Scalar/MagicConst/VirtualLine.phpè8&%dèãò¬2¤2src/Psalm/Node/Scalar/MagicConst/VirtualMethod.phpî8&%dî7 â*¤1src/Psalm/Node/Scalar/MagicConst/VirtualClass.phpí8&%dí[{ Ѥ1src/Psalm/Node/Scalar/MagicConst/VirtualTrait.phpí8&%dí…j,¤(src/Psalm/Node/Scalar/VirtualLNumber.phpÛ8&%dÛÕy¶7¤src/Psalm/Node/VirtualArg.php±8&%d±ŸƒY9¤&src/Psalm/Node/VirtualNullableType.phpÌ8&%dÌsõóÚ¤$src/Psalm/Node/VirtualIdentifier.php&8&%d&Í6̤"src/Psalm/Node/VirtualMatchArm.phpÀ8&%dÀ€¸±¤src/Psalm/Node/VirtualName.php´8&%d´ N*ô¤"src/Psalm/Node/Stmt/VirtualNop.phpë8&%dë[&ÝÓ¤$src/Psalm/Node/Stmt/VirtualThrow.phpÓ8&%dÓ<‘S°¤$src/Psalm/Node/Stmt/VirtualConst.phpÓ8&%dÓôR¾B¤)src/Psalm/Node/Stmt/VirtualClassConst.phpà8&%dà•±•‘¤&src/Psalm/Node/Stmt/VirtualForeach.phpÙ8&%dÙcŽ, ¤$src/Psalm/Node/Stmt/VirtualLabel.phpÑ8&%dÑÕI…¤+src/Psalm/Node/Stmt/VirtualHaltCompiler.phpæ8&%dæÄ²_¤$src/Psalm/Node/Stmt/VirtualBreak.phpÓ8&%dÓ"é¤$src/Psalm/Node/Stmt/VirtualWhile.phpÓ8&%dÓݬwΤ)src/Psalm/Node/Stmt/VirtualExpression.php8&%d5u'¤-src/Psalm/Node/Stmt/VirtualDeclareDeclare.phpì8&%dìÍžœ¤"src/Psalm/Node/Stmt/VirtualFor.phpÍ8&%dÍx¸éº¤"src/Psalm/Node/Stmt/VirtualUse.phpÍ8&%d͹uˤ%src/Psalm/Node/Stmt/VirtualStatic.phpÖ8&%dÖç,‚I¤'src/Psalm/Node/Stmt/VirtualProperty.phpÚ8&%dÚ´ ú¤#src/Psalm/Node/Stmt/VirtualGoto.phpÐ8&%dлQ¿¶¤$src/Psalm/Node/Stmt/VirtualUnset.phpÓ8&%dÓ¿]Ô^¤%src/Psalm/Node/Stmt/VirtualReturn.phpÖ8&%dÖ¢w¢Æ¤'src/Psalm/Node/Stmt/VirtualFunction.phpÜ8&%dÜP0Ó¤#src/Psalm/Node/Stmt/VirtualElse.phpÐ8&%dÐE§¤!src/Psalm/Node/Stmt/VirtualIf.phpÊ8&%dÊ!œŠ°¤(src/Psalm/Node/Stmt/VirtualNamespace.phpß8&%dßùwP;¤)src/Psalm/Node/Stmt/VirtualInlineHTML.phpà8&%d೯'!¤7src/Psalm/Node/Stmt/TraitUseAdaptation/VirtualAlias.php÷8&%d÷•?·¤<src/Psalm/Node/Stmt/TraitUseAdaptation/VirtualPrecedence.php8&%d¼]?|¤#src/Psalm/Node/Stmt/VirtualCase.phpÐ8&%dÐÛÉØC¤'src/Psalm/Node/Stmt/VirtualGroupUse.phpÚ8&%dÚd±>ä¤'src/Psalm/Node/Stmt/VirtualTraitUse.phpÚ8&%dÚ1ßúy¤'src/Psalm/Node/Stmt/VirtualContinue.phpÜ8&%dÜO¬Àæ¤&src/Psalm/Node/Stmt/VirtualDeclare.phpÙ8&%dÙ¼co"¤%src/Psalm/Node/Stmt/VirtualGlobal.phpÖ8&%dÖ¤-»¤$src/Psalm/Node/Stmt/VirtualClass.phpÓ8&%dÓa'õb¤&src/Psalm/Node/Stmt/VirtualFinally.phpÙ8&%dÙc…î_¤$src/Psalm/Node/Stmt/VirtualCatch.phpÓ8&%dÓ ƒa0¤%src/Psalm/Node/Stmt/VirtualElseIf.phpÖ8&%dÖ»'ѹ¤#src/Psalm/Node/Stmt/VirtualEcho.phpÐ8&%dÐ}Ĥ/src/Psalm/Node/Stmt/VirtualPropertyProperty.phpò8&%dòþï!&¤'src/Psalm/Node/Stmt/VirtualTryCatch.phpÚ8&%dÚqš-)¤%src/Psalm/Node/Stmt/VirtualUseUse.phpÔ8&%dÔF*¤$src/Psalm/Node/Stmt/VirtualTrait.phpÓ8&%dÓ¿Ñ“Ÿ¤*src/Psalm/Node/Stmt/VirtualClassMethod.phpã8&%dãí*R¤(src/Psalm/Node/Stmt/VirtualInterface.phpß8&%dßϽ4¤(src/Psalm/Node/Stmt/VirtualStaticVar.phpÝ8&%dÝ^NaD¤%src/Psalm/Node/Stmt/VirtualSwitch.phpÖ8&%dÖ ¥¤!src/Psalm/Node/Stmt/VirtualDo.phpÊ8&%dÊ ÈÝx¤#src/Psalm/Node/VirtualAttribute.phpÃ8&%dÃD\%¤(src/Psalm/Node/Expr/VirtualArrayItem.phpÝ8&%dÝÒqv¤(src/Psalm/Node/Expr/VirtualUnaryPlus.phpÝ8&%dÝ}½n¤'src/Psalm/Node/Expr/VirtualFuncCall.phpÚ8&%dÚ‹¤$src/Psalm/Node/Expr/VirtualThrow.phpÓ8&%dÓΟ0¤$src/Psalm/Node/Expr/VirtualEmpty.phpÓ8&%dÓ~MKY¤)src/Psalm/Node/Expr/VirtualInstanceof.phpâ8&%dâB—CÞ¤1src/Psalm/Node/Expr/VirtualNullsafeMethodCall.phpø8&%dø©f{ˆ¤)src/Psalm/Node/Expr/VirtualUnaryMinus.phpà8&%dàä±É ¤#src/Psalm/Node/Expr/VirtualList.phpÐ8&%dÐ@”÷Ϥ'src/Psalm/Node/Expr/VirtualVariable.phpÚ8&%dÚ< פ$src/Psalm/Node/Expr/VirtualYield.phpÓ8&%dÓºüÌŸ¤&src/Psalm/Node/Expr/VirtualInclude.phpÙ8&%dÙöÒʤ#src/Psalm/Node/Expr/VirtualExit.phpÐ8&%dÐF¢¤(src/Psalm/Node/Expr/VirtualYieldFrom.phpÝ8&%dÝl4¤%src/Psalm/Node/Expr/VirtualPreInc.phpÔ8&%dÔ±7¤,src/Psalm/Node/Expr/VirtualErrorSuppress.phpé8&%dé=ýì…¤.src/Psalm/Node/Expr/AssignOp/VirtualConcat.phpæ8&%dæÉ(qò¤,src/Psalm/Node/Expr/AssignOp/VirtualPlus.phpà8&%dà³M^R¤0src/Psalm/Node/Expr/AssignOp/VirtualCoalesce.phpì8&%dì¥]¤+src/Psalm/Node/Expr/AssignOp/VirtualDiv.phpÝ8&%dÝòoÌ'¤+src/Psalm/Node/Expr/AssignOp/VirtualMul.phpÝ8&%dÝŒå¤1src/Psalm/Node/Expr/AssignOp/VirtualBitwiseOr.phpï8&%dïyÚî¤-src/Psalm/Node/Expr/AssignOp/VirtualMinus.phpã8&%dã:ƒK¤2src/Psalm/Node/Expr/AssignOp/VirtualBitwiseAnd.phpò8&%dòˆtRN¤+src/Psalm/Node/Expr/AssignOp/VirtualPow.phpÝ8&%dÝž¼a­¤+src/Psalm/Node/Expr/AssignOp/VirtualMod.phpÝ8&%dÝ} {¤2src/Psalm/Node/Expr/AssignOp/VirtualShiftRight.phpò8&%dòsëì¤1src/Psalm/Node/Expr/AssignOp/VirtualShiftLeft.phpï8&%dïLr•Ù¤2src/Psalm/Node/Expr/AssignOp/VirtualBitwiseXor.phpò8&%dòÍš£G¤,src/Psalm/Node/Expr/VirtualArrowFunction.phpé8&%déËÚžÞ¤(src/Psalm/Node/Expr/VirtualShellExec.phpÝ8&%dÝtp±¤&src/Psalm/Node/Expr/VirtualTernary.php×8&%d×}8¼c¤.src/Psalm/Node/Expr/VirtualClassConstFetch.phpï8&%dïØNE^¤*src/Psalm/Node/Expr/Cast/VirtualObject.phpà8&%dàÀQ¿4¤*src/Psalm/Node/Expr/Cast/VirtualString.phpà8&%dà»fÕ*¤)src/Psalm/Node/Expr/Cast/VirtualUnset.phpÝ8&%dÝ_“)š¤'src/Psalm/Node/Expr/Cast/VirtualInt.php×8&%d×2]¤(src/Psalm/Node/Expr/Cast/VirtualBool.phpÚ8&%dÚ‚ëÃɤ)src/Psalm/Node/Expr/Cast/VirtualArray.phpÝ8&%dÝJÞ ¤*src/Psalm/Node/Expr/Cast/VirtualDouble.phpÞ8&%dÞ³kí ¤)src/Psalm/Node/Expr/VirtualBitwiseNot.phpà8&%dàÇž2¤"src/Psalm/Node/Expr/VirtualNew.phpÍ8&%dÍîòBŒ¤&src/Psalm/Node/Expr/VirtualPostDec.php×8&%d×úl¤$src/Psalm/Node/Expr/VirtualMatch.phpÓ8&%dÓ5¼0n¤,src/Psalm/Node/Expr/VirtualPropertyFetch.phpé8&%d錌l¤$src/Psalm/Node/Expr/VirtualPrint.phpÓ8&%dÓ: ¤)src/Psalm/Node/Expr/VirtualClosureUse.phpà8&%dà Ì3 ¤6src/Psalm/Node/Expr/BinaryOp/VirtualSmallerOrEqual.phpþ8&%dþµdE^¤4src/Psalm/Node/Expr/BinaryOp/VirtualNotIdentical.phpø8&%dø6Æfú¤.src/Psalm/Node/Expr/BinaryOp/VirtualConcat.phpæ8&%dæé\Ì1¤,src/Psalm/Node/Expr/BinaryOp/VirtualPlus.phpà8&%dà,cP¤/src/Psalm/Node/Expr/BinaryOp/VirtualGreater.phpé8&%déý°¤0src/Psalm/Node/Expr/BinaryOp/VirtualCoalesce.phpì8&%dìvXRa¤/src/Psalm/Node/Expr/BinaryOp/VirtualSmaller.phpé8&%déô)d¤2src/Psalm/Node/Expr/BinaryOp/VirtualLogicalAnd.phpò8&%dòÝWHe¤+src/Psalm/Node/Expr/BinaryOp/VirtualDiv.phpÝ8&%dÝfBdò¤+src/Psalm/Node/Expr/BinaryOp/VirtualMul.phpÝ8&%dݽMפ1src/Psalm/Node/Expr/BinaryOp/VirtualBitwiseOr.phpï8&%dïÊ…&’¤1src/Psalm/Node/Expr/BinaryOp/VirtualBooleanOr.phpï8&%dïÙ×–¤-src/Psalm/Node/Expr/BinaryOp/VirtualMinus.phpã8&%dãë¸÷¤2src/Psalm/Node/Expr/BinaryOp/VirtualBitwiseAnd.phpò8&%dò±Úâ¤+src/Psalm/Node/Expr/BinaryOp/VirtualPow.phpÝ8&%dÝ ‘Éx¤1src/Psalm/Node/Expr/BinaryOp/VirtualSpaceship.phpï8&%dïçƒúó¤+src/Psalm/Node/Expr/BinaryOp/VirtualMod.phpÝ8&%dÝé ¨®¤2src/Psalm/Node/Expr/BinaryOp/VirtualShiftRight.phpò8&%dòþÊc@¤1src/Psalm/Node/Expr/BinaryOp/VirtualShiftLeft.phpï8&%dïÿ- ¥¤1src/Psalm/Node/Expr/BinaryOp/VirtualIdentical.phpï8&%dï8«…ç¤0src/Psalm/Node/Expr/BinaryOp/VirtualNotEqual.phpì8&%dì¡ñŒ¤6src/Psalm/Node/Expr/BinaryOp/VirtualGreaterOrEqual.phpþ8&%dþtO¡¤2src/Psalm/Node/Expr/BinaryOp/VirtualLogicalXor.phpò8&%dò˜¹¹l¤-src/Psalm/Node/Expr/BinaryOp/VirtualEqual.phpã8&%dãøö¤1src/Psalm/Node/Expr/BinaryOp/VirtualLogicalOr.phpï8&%dï~ƒLD¤2src/Psalm/Node/Expr/BinaryOp/VirtualBitwiseXor.phpò8&%dò@_+ë¤2src/Psalm/Node/Expr/BinaryOp/VirtualBooleanAnd.phpò8&%dòHA ¤#src/Psalm/Node/Expr/VirtualEval.phpÐ8&%dÐ}&Óx¤$src/Psalm/Node/Expr/VirtualClone.phpÓ8&%dÓAR‚¤)src/Psalm/Node/Expr/VirtualMethodCall.phpà8&%dàÎÆÌL¤2src/Psalm/Node/Expr/VirtualStaticPropertyFetch.phpû8&%dûÃìÍV¤&src/Psalm/Node/Expr/VirtualClosure.php×8&%d×d(Í„¤$src/Psalm/Node/Expr/VirtualError.phpÔ8&%dÔDg"¤%src/Psalm/Node/Expr/VirtualAssign.phpÔ8&%dÔ ˜¤$src/Psalm/Node/Expr/VirtualArray.phpÓ8&%dÓX¾i¤%src/Psalm/Node/Expr/VirtualPreDec.phpÔ8&%dÔÖ~¤,src/Psalm/Node/Expr/VirtualArrayDimFetch.phpé8&%déÊø7ˤ)src/Psalm/Node/Expr/VirtualConstFetch.phpà8&%dà–Þê{¤&src/Psalm/Node/Expr/VirtualPostInc.php×8&%d×,æüɤ(src/Psalm/Node/Expr/VirtualAssignRef.phpÝ8&%dÝŠÞv[¤$src/Psalm/Node/Expr/VirtualIsset.phpÓ8&%dÓÁ¨Îw¤)src/Psalm/Node/Expr/VirtualBooleanNot.phpà8&%dàŠn@Ù¤4src/Psalm/Node/Expr/VirtualNullsafePropertyFetch.php8&%dÅ#ܤ)src/Psalm/Node/Expr/VirtualStaticCall.phpà8&%dà@ëm:¤src/Psalm/Node/VirtualNode.phpž8&%dždÚšD¤src/Psalm/StatementsSource.phpõ8&%dõâ•lĤsrc/Psalm/FileSource.phpù8&%dù¼=;¤*src/Psalm/Issue/NullPropertyAssignment.php08&%d06³ú¤2src/Psalm/Issue/InvalidPropertyAssignmentValue.phpµ8&%dµ·ï¸m¤*src/Psalm/Issue/InterfaceInstantiation.phpª8&%dª^žá”¤%src/Psalm/Issue/ParamNameMismatch.php¤8&%d¤Æü¬T¤-src/Psalm/Issue/PossiblyUnusedReturnValue.php­8&%d­ãô¬ô¤6src/Psalm/Issue/ImplementationRequirementViolation.php¶8&%d¶-ÄϤ,src/Psalm/Issue/NonInvariantPropertyType.phpÆ8&%dÆcœ ³¤"src/Psalm/Issue/UnusedVariable.php¡8&%d¡ý&æ¤src/Psalm/Issue/NoValue.php›8&%d›`òw¤#src/Psalm/Issue/TaintedCallable.phpƒ8&%dƒ\™Ë¤ src/Psalm/Issue/TaintedShell.php€8&%d€Qûíé¤1src/Psalm/Issue/MismatchingDocblockReturnType.php°8&%d°ÅOyª¤src/Psalm/Issue/TaintedSSRF.php8&%dj_”³¤"src/Psalm/Issue/TaintedInclude.php‚8&%d‚`认-src/Psalm/Issue/UnsupportedReferenceUsage.php¬8&%d¬øÖy6¤(src/Psalm/Issue/InaccessibleProperty.php§8&%d§­÷@¤)src/Psalm/Issue/PossiblyNullReference.php§8&%d§2ŠŒ¤0src/Psalm/Issue/MismatchingDocblockParamType.php¯8&%d¯¾’¤.src/Psalm/Issue/ConstantDeclarationInTrait.phpÈ8&%dÈ7Òl¤&src/Psalm/Issue/MixedPropertyFetch.phpí8&%díĤΤ'src/Psalm/Issue/UnresolvableInclude.php¦8&%d¦ $Ëk¤+src/Psalm/Issue/PossiblyNullArrayOffset.phpª8&%dªxm¤0src/Psalm/Issue/UnimplementedInterfaceMethod.php¯8&%d¯“2¶¤"src/Psalm/Issue/DuplicateClass.php¡8&%d¡77*»¤)src/Psalm/Issue/PossiblyFalseArgument.php¬8&%d¬ÐÙ]ý¤src/Psalm/Issue/InvalidCast.phpž8&%džyÿÕe¤0src/Psalm/Issue/AmbiguousConstantInheritance.php¸8&%d¸…Kô¤¤0src/Psalm/Issue/PossiblyUndefinedArrayOffset.php¯8&%d¯õ1ª¤(src/Psalm/Issue/InvalidNamedArgument.php«8&%d«)¹¼×¤2src/Psalm/Issue/PossiblyInvalidArrayAssignment.php±8&%d± œ–¤!src/Psalm/Issue/InternalClass.php¿8&%d¿˜W¤+src/Psalm/Issue/MethodSignatureMismatch.php©8&%d©Å«Mù¤3src/Psalm/Issue/PossiblyUndefinedGlobalVariable.php¶8&%d¶©çߤsrc/Psalm/Issue/PluginIssue.php]8&%d]ä•¿H¤*src/Psalm/Issue/UndefinedDocblockClass.php«8&%d«‹§ì(¤#src/Psalm/Issue/NullArrayAccess.php)8&%d)bžNw¤&src/Psalm/Issue/UnusedForeachValue.php¦8&%d¦p¡·ˆ¤2src/Psalm/Issue/InvalidConstantAssignmentValue.phpº8&%dºº ÅZ¤!src/Psalm/Issue/InvalidGlobal.php 8&%d Y@.¤(src/Psalm/Issue/MissingTemplateParam.php…8&%d…9=௤4src/Psalm/Issue/MoreSpecificImplementedParamType.php³8&%d³Áˤ!src/Psalm/Issue/MixedArgument.php8&%dx ¤&src/Psalm/Issue/TaintedUnserialize.php†8&%d†>Ýòͤ'src/Psalm/Issue/ContinueOutsideLoop.php¥8&%d¥ †KA¤!src/Psalm/Issue/TaintedHeader.php8&%d¾Ä[ݤ6src/Psalm/Issue/PossiblyUndefinedStringArrayOffset.php¶8&%d¶¸u°¤1src/Psalm/Issue/LessSpecificClassConstantType.php¹8&%d¹fݱ¤%src/Psalm/Issue/DuplicateEnumCase.php¦8&%d¦œ%*Ť,src/Psalm/Issue/InvalidDocblockParamName.php«8&%d«ÏìÞZ¤5src/Psalm/Issue/LessSpecificImplementedReturnType.php´8&%d´¶!×3¤!src/Psalm/Issue/RedundantCast.php 8&%d Õb¼á¤,src/Psalm/Issue/ImpurePropertyAssignment.php¬8&%d¬ðh)¤src/Psalm/Issue/ConfigIssue.phpŸ8&%dŸ£Âµ ¤#src/Psalm/Issue/InvalidIterator.php 8&%d .éŸQ¤%src/Psalm/Issue/CircularReference.php¤8&%d¤¸Y–j¤"src/Psalm/Issue/UnusedProperty.phpš8&%dšU·¹¤/src/Psalm/Issue/ImpureByReferenceAssignment.php¯8&%d¯|ŸÒ¤3src/Psalm/Issue/UndefinedThisPropertyAssignment.phpµ8&%dµ™”Ö¤*src/Psalm/Issue/OverriddenMethodAccess.php¨8&%d¨Ë¡¤/src/Psalm/Issue/MixedStringOffsetAssignment.phpö8&%döœ>¤src/Psalm/Issue/UnusedClass.phpŸ8&%dŸšËè¤*src/Psalm/Issue/DuplicateEnumCaseValue.php«8&%d«ð¿ìe¤'src/Psalm/Issue/UnusedBaselineEntry.php¼8&%d¼æü )¤src/Psalm/Issue/TaintedEval.php8&%d&sxP¤*src/Psalm/Issue/MoreSpecificReturnType.php¨8&%d¨ØÀ’¤*src/Psalm/Issue/InvalidLiteralArgument.php­8&%d­žTð¤%src/Psalm/Issue/InvalidTypeImport.php¤8&%d¤ÐØRž¤2src/Psalm/Issue/PossiblyNullPropertyAssignment.php?8&%d?ž¢*¤4src/Psalm/Issue/InvalidTraversableImplementation.php´8&%d´¡¹ÿ¤+src/Psalm/Issue/PossiblyNullArrayAccess.php88&%d8*º'M¤#src/Psalm/Issue/DeprecatedClass.php¢8&%d¢HÛn¤src/Psalm/Issue/TaintedFile.php8&%dºó¤ src/Psalm/Issue/InvalidThrow.php¡8&%d¡23õø¤(src/Psalm/Issue/PossiblyUnusedMethod.php¼8&%d¼»˜¤!src/Psalm/Issue/InvalidParent.php¡8&%d¡½’ã7¤0src/Psalm/Issue/TraitMethodSignatureMismatch.php¯8&%d¯Ë7¤+src/Psalm/Issue/PossiblyInvalidIterator.phpª8&%dª|;B¤"src/Psalm/Issue/UndefinedClass.php¢8&%d¢¿Œú¤%src/Psalm/Issue/UndefinedFunction.php¨8&%d¨NÖÿ¡¤ src/Psalm/Issue/FalseOperand.phpŸ8&%dŸµâô¤&src/Psalm/Issue/InvalidArrayOffset.php¥8&%d¥ÒPZ¤2src/Psalm/Issue/InvalidInterfaceImplementation.phpŸ8&%dŸx“#ü¤:src/Psalm/Issue/PossiblyInvalidPropertyAssignmentValue.php½8&%d½ÃT²ó¤*src/Psalm/Issue/PossiblyUnusedProperty.php¢8&%d¢¡¹ä¤(src/Psalm/Issue/PropertyTypeCoercion.php«8&%d«NŸi¤-src/Psalm/Issue/MixedArgumentTypeCoercion.phpš8&%d𫙦¤#src/Psalm/Issue/InvalidToString.php¡8&%d¡²õ ¤ src/Psalm/Issue/InvalidScope.phpŸ8&%dŸ†ßǤ/src/Psalm/Issue/PossiblyInvalidFunctionCall.php®8&%d®Ò£˜`¤+src/Psalm/Issue/PossiblyUndefinedMethod.php¬8&%d¬þ•â¤.src/Psalm/Issue/PossiblyInvalidArrayAccess.php­8&%d­ûQr<¤'src/Psalm/Issue/MissingPropertyType.php©8&%d©¯ÈÙâ¤'src/Psalm/Issue/InvalidParamDefault.php¦8&%d¦ q:¤#src/Psalm/Issue/DeprecatedTrait.php¢8&%d¢Iݰ¼¤*src/Psalm/Issue/PossiblyInvalidOperand.php©8&%d©òíȤ:src/Psalm/Issue/RedundantFunctionCallGivenDocblockType.php¹8&%d¹ÑR¡•¤*src/Psalm/Issue/InvalidReturnStatement.php©8&%d©qaTâ¤$src/Psalm/Issue/InternalProperty.php§8&%d§†•`w¤(src/Psalm/Issue/InvalidTemplateParam.php§8&%d§!aø¤/src/Psalm/Issue/UnimplementedAbstractMethod.php¯8&%d¯¬£ ú¤!src/Psalm/Issue/TaintedCustom.php8&%di„ÔT¤(src/Psalm/Issue/MixedArrayAssignment.phpð8&%dð“Ð4¤+src/Psalm/Issue/UndefinedAttributeClass.php¬8&%d¬¥ž«ü¤,src/Psalm/Issue/PossiblyNullFunctionCall.phpª8&%dª¤&src/Psalm/Issue/InvalidExtendClass.php§8&%d§a Ȥ%src/Psalm/Issue/DuplicateArrayKey.php¥8&%d¥Üí¤6¤"src/Psalm/Issue/UndefinedTrait.php¡8&%d¡õ¬¿Ï¤ src/Psalm/Issue/InvalidClass.phpž8&%džîe©¤)src/Psalm/Issue/AbstractInstantiation.php§8&%d§ˆ%ɤ3src/Psalm/Issue/PossiblyUndefinedIntArrayOffset.php³8&%d³IÆMΤ-src/Psalm/Issue/MixedPropertyTypeCoercion.php8&%dp/=̤0src/Psalm/Issue/PossiblyInvalidPropertyFetch.php¯8&%d¯Y9ík¤(src/Psalm/Issue/ImpureStaticVariable.php¨8&%d¨žÖ2B¤'src/Psalm/Issue/ImpurePropertyFetch.php§8&%d§©ÓôȤ&src/Psalm/Issue/RedundantCondition.php†8&%d†X|Ϥ*src/Psalm/Issue/LessSpecificReturnType.php¨8&%d¨‘yp¤+src/Psalm/Issue/MixedPropertyAssignment.phpò8&%dòXá¤src/Psalm/Issue/NullOperand.php8&%dEwV¤#src/Psalm/Issue/StringIncrement.php¢8&%d¢kq–«¤'src/Psalm/Issue/PossiblyNullOperand.php¥8&%d¥í R[¤%src/Psalm/Issue/MissingDependency.phpƒ8&%dƒÓ¬¤src/Psalm/Issue/ParseError.phpž8&%dž¥°¤src/Psalm/Issue/CheckType.phpœ8&%dœ>ó#C¤*src/Psalm/Issue/PossiblyFalseReference.php©8&%d©WÇϤ/src/Psalm/Issue/PossiblyNullArrayAssignment.php®8&%d®c"=§¤3src/Psalm/Issue/MismatchingDocblockPropertyType.php²8&%d²g4¯ï¤src/Psalm/Issue/MixedClone.phpæ8&%d拚ÂÖ¤src/Psalm/Issue/MethodIssue.phpŸ8&%dŸLupæ¤(src/Psalm/Issue/ImpureStaticProperty.php¨8&%d¨•0€i¤#src/Psalm/Issue/DuplicateMethod.php£8&%d£ùʤU¤&src/Psalm/Issue/DeprecatedProperty.php¨8&%d¨ºh z¤/src/Psalm/Issue/OverriddenInterfaceConstant.php·8&%d·ÍÒQ¤#src/Psalm/Issue/InvalidArgument.php¤8&%d¤dYÔª¤&src/Psalm/Issue/UnusedFunctionCall.phpª8&%dªO€Ô…¤%src/Psalm/Issue/MixedFunctionCall.phpí8&%díÓ­³‰¤8src/Psalm/Issue/MethodSignatureMustProvideReturnType.php¸8&%d¸11ì¤-src/Psalm/Issue/PossiblyNullPropertyFetch.php:8&%d:oè¤src/Psalm/Issue/TaintedLdap.php8&%dÙê:¤ src/Psalm/Issue/InvalidClone.phpž8&%džú?ƒ¦¤*src/Psalm/Issue/InvalidArrayAssignment.php§8&%d§j!©¤'src/Psalm/Issue/PossiblyUnusedParam.php§8&%d§ßHȤ+src/Psalm/Issue/NullableReturnStatement.phpª8&%dª )¨¤ src/Psalm/Issue/InvalidCatch.php 8&%d UYje¤src/Psalm/Issue/ClassIssue.php™8&%d™£nÛ¤'src/Psalm/Issue/PossiblyInvalidCast.php¦8&%d¦Žl:¤2src/Psalm/Issue/ConflictingReferenceConstraint.php°8&%d°tNŠÀ¤+src/Psalm/Issue/MixedInferredReturnType.phpò8&%dò)b¤'src/Psalm/Issue/UnsafeInstantiation.php¦8&%d¦ºw¿&¤)src/Psalm/Issue/NoInterfaceProperties.php¨8&%d¨X7f¤#src/Psalm/Issue/InvalidDocblock.php 8&%d Q}J¤%src/Psalm/Issue/UnusedReturnValue.php¥8&%d¥‘öY ¤!src/Psalm/Issue/VariableIssue.php8&%d"®vG¤0src/Psalm/Issue/ImplementedParamTypeMismatch.php¯8&%d¯ÎãÍe¤$src/Psalm/Issue/TooManyArguments.php¦8&%d¦U×ï0¤,src/Psalm/Issue/OverriddenPropertyAccess.php¬8&%d¬l *¤'src/Psalm/Issue/TaintedSystemSecret.php‡8&%d‡„‹ˆ¤*src/Psalm/Issue/MixedArrayTypeCoercion.phpò8&%dòÑ™&¤/src/Psalm/Issue/PropertyNotSetInConstructor.php¥8&%d¥º å0¤$src/Psalm/Issue/EmptyArrayAccess.php¤8&%d¤RXÌR¤%src/Psalm/Issue/MutableDependency.php¤8&%d¤õ5mݤ'src/Psalm/Issue/MissingDocblockType.php¦8&%d¦µ›L.¤src/Psalm/Issue/TaintedSql.php~8&%d~¿=¬ù¤src/Psalm/Issue/TaintedHtml.php8&%dÑç$ï¤%src/Psalm/Issue/DuplicateConstant.php¦8&%d¦¦à$\¤)src/Psalm/Issue/RedundantFunctionCall.php¨8&%d¨úý ¤#src/Psalm/Issue/TooFewArguments.php¦8&%d¦iHš8¤8src/Psalm/Issue/PossiblyFalsePropertyAssignmentValue.php»8&%d»J8¥¤#src/Psalm/Issue/UndefinedMethod.php£8&%d£%“—Ó¤#src/Psalm/Issue/MixedAssignment.phpê8&%dêÛ¿ó¤&src/Psalm/Issue/AbstractMethodCall.php¦8&%d¦›Ðd¤,src/Psalm/Issue/UndefinedInterfaceMethod.php­8&%d­²hL˜¤%src/Psalm/Issue/MissingReturnType.php£8&%d£ÝÑ׊¤&src/Psalm/Issue/InvalidStringClass.php¥8&%d¥5™J¤*src/Psalm/Issue/TypeDoesNotContainType.php‰8&%d‰z`™I¤)src/Psalm/Issue/TooManyTemplateParams.php¨8&%d¨Ó^À¤/src/Psalm/Issue/UndefinedMagicPropertyFetch.php²8&%d²6K÷¤&src/Psalm/Issue/ImpureFunctionCall.php¦8&%d¦eÎ?e¤-src/Psalm/Issue/PossiblyInvalidMethodCall.php¬8&%d¬-u° ¤+src/Psalm/Issue/MissingClosureParamType.phpª8&%dª›¢R¤+src/Psalm/Issue/UndefinedGlobalVariable.php¯8&%d¯GW턤.src/Psalm/Issue/PossibleRawObjectIteration.php­8&%d­çéM!¤1src/Psalm/Issue/ExtensionRequirementViolation.php±8&%d±—éI¤(src/Psalm/Issue/InvalidPropertyFetch.php¦8&%d¦RFO¤%src/Psalm/Issue/UndefinedConstant.php¤8&%d¤ÈŠµÐ¤(src/Psalm/Issue/ImplicitToStringCast.php¦8&%d¦ÆnUv¤&src/Psalm/Issue/InvalidArrayAccess.php£8&%d£ð£Í¤%src/Psalm/Issue/InvalidMethodCall.php£8&%d£HE®¤!src/Psalm/Issue/ComplexMethod.php¡8&%d¡0ZžB¤$src/Psalm/Issue/MixedArrayOffset.phpë8&%dëˆI̤$src/Psalm/Issue/AssignmentToVoid.php£8&%d£vÒx(¤!src/Psalm/Issue/TaintedCookie.php8&%d5Rô¤$src/Psalm/Issue/LoopInvalidation.php¤8&%d¤2¥Ÿ¶¤(src/Psalm/Issue/InvalidEnumCaseValue.php©8&%d©Éìܤ.src/Psalm/Issue/PossiblyInvalidDocblockTag.php­8&%d­TÄ-¤(src/Psalm/Issue/PossiblyNullIterator.php¦8&%d¦Ëô½¼¤&src/Psalm/Issue/ClassConstantIssue.php}8&%d}`0ŒÚ¤!src/Psalm/Issue/NullReference.php 8&%d šªÐ¤+src/Psalm/Issue/OverriddenFinalConstant.php³8&%d³wñ¥7¤5src/Psalm/Issue/PossiblyInvalidPropertyAssignment.php´8&%d´ZÏ™¤!src/Psalm/Issue/FunctionIssue.php©8&%d©CçN¤src/Psalm/Issue/CodeIssue.phpé 8&%dé Kˆ?¤#src/Psalm/Issue/MixedIssueTrait.phpî8&%dîýqù¤"src/Psalm/Issue/InternalMethod.php£8&%d£Å!¿1¤.src/Psalm/Issue/UnsafeGenericInstantiation.php­8&%d­§´&î¤&src/Psalm/Issue/DeprecatedFunction.php©8&%d©¦_öĤ(src/Psalm/Issue/UndefinedMagicMethod.php©8&%d©½Ú¥¤.src/Psalm/Issue/UncaughtThrowInGlobalScope.php®8&%d®»—òê¤*src/Psalm/Issue/InvalidEnumBackingType.php«8&%d«ÜoÜr¤%src/Psalm/Issue/UnusedConstructor.php§8&%d§ûÙŠÀ¤%src/Psalm/Issue/InvalidEnumMethod.php§8&%d§sxˆP¤!src/Psalm/Issue/ForbiddenCode.phpž8&%džyï6•¤"src/Psalm/Issue/ParentNotFound.php¡8&%d¡­¬Þ¤)src/Psalm/Issue/UnrecognizedStatement.php¨8&%d¨5£±w¤)src/Psalm/Issue/InvalidScalarArgument.php«8&%d«@±A9¤src/Psalm/Issue/MixedIssue.phpÁ8&%dÁ·š!Ϥ%src/Psalm/Issue/DuplicateFunction.php¥8&%d¥Ò´8K¤,src/Psalm/Issue/UnnecessaryVarAnnotation.php¬8&%d¬6zb]¤*src/Psalm/Issue/UnrecognizedExpression.php©8&%d©”0 «¤%src/Psalm/Issue/NonStaticSelfCall.php¤8&%d¤RŸ…¤)src/Psalm/Issue/MissingThrowsDocblock.php‡8&%d‡HjQ¤1src/Psalm/Issue/ImplementedReturnTypeMismatch.php°8&%d°áí5‹¤$src/Psalm/Issue/MissingParamType.php£8&%d£Øj¨•¤(src/Psalm/Issue/UnresolvableConstant.php¨8&%d¨Ð¯tä¤(src/Psalm/Issue/ParadoxicalCondition.php§8&%d§ ¯´¤-src/Psalm/Issue/RedundantIdentityWithTrue.php¬8&%d¬ày›¤$src/Psalm/Issue/NullFunctionCall.php£8&%d£Ñ˜u¤ src/Psalm/Issue/NullArgument.php¢8&%d¢M›Ël¤"src/Psalm/Issue/ImpureVariable.php¢8&%d¢kó ¤ src/Psalm/Issue/ReservedWord.phpŸ8&%dŸ=œèF¤5src/Psalm/Issue/ReferenceReusedFromConfusingScope.php´8&%d´ÊݪD¤&src/Psalm/Issue/DeprecatedConstant.php¥8&%d¥p'+Õ¤4src/Psalm/Issue/UndefinedMagicPropertyAssignment.php·8&%d·Þ¾פ&src/Psalm/Issue/InaccessibleMethod.php¤8&%d¤„-ƒ_¤src/Psalm/Issue/UnusedParam.phpŸ8&%dŸ¦/çi¤'src/Psalm/Issue/DeprecatedInterface.php§8&%d§ô½øD¤2src/Psalm/Issue/RedundantCastGivenDocblockType.php±8&%d±Y«ß¤ src/Psalm/Issue/TaintedInput.php8&%d þ¤&src/Psalm/Issue/MissingConstructor.php…8&%d…ƒƒQ¤src/Psalm/Issue/Trace.php˜8&%d˜®)ðú¤8src/Psalm/Issue/RedundantPropertyInitializationCheck.php·8&%d·Ö•¤*src/Psalm/Issue/TypeDoesNotContainNull.php‰8&%d‰淽Ф(src/Psalm/Issue/PossiblyNullArgument.phpª8&%dª4>Œc¤)src/Psalm/Issue/UninitializedProperty.php¬8&%d¬[J41¤,src/Psalm/Issue/InvalidClassConstantType.php´8&%d´˜4Nª¤"src/Psalm/Issue/DuplicateParam.php¡8&%d¡MËÿ…¤/src/Psalm/Issue/LessSpecificReturnStatement.php®8&%d®„^Õs¤)src/Psalm/Issue/TaintedTextWithQuotes.php‰8&%d‰pLX9¤*src/Psalm/Issue/InvalidPassByReference.phpª8&%dª×þ¤¬¤(src/Psalm/Issue/ArgumentTypeCoercion.php«8&%d«Ó–÷¤%src/Psalm/Issue/TaintedUserSecret.php…8&%d…¸n¤&src/Psalm/Issue/UndefinedInterface.php§8&%d§Œo¤(src/Psalm/Issue/MixedReturnStatement.phpð8&%dð€‚®¤'src/Psalm/Issue/UnusedDocblockParam.php§8&%d§F­ìö¤$src/Psalm/Issue/InvalidAttribute.php¤8&%d¤”Å»¸¤/src/Psalm/Issue/UndefinedPropertyAssignment.php±8&%d±+M7¤.src/Psalm/Issue/PossiblyInvalidArrayOffset.php­8&%d­Œu¹Û¤ src/Psalm/Issue/UnusedMethod.php´8&%d´cѳº¤+src/Psalm/Issue/UnhandledMatchCondition.phpª8&%dªCa‘h¤$src/Psalm/Issue/MixedArrayAccess.phpë8&%dë\O„Ѥ*src/Psalm/Issue/UndefinedPropertyFetch.php¬8&%d¬Mn½¤)src/Psalm/Issue/DirectConstructorCall.php¨8&%d¨QÆ_¤src/Psalm/Issue/MissingFile.php|8&%d|»•,¤+src/Psalm/Issue/FalsableReturnStatement.phpª8&%dªŽóº¤)src/Psalm/Issue/PossiblyFalseIterator.php¨8&%d¨fž‹G¤ src/Psalm/Issue/MixedOperand.phpç8&%dçç|\ì¤"src/Psalm/Issue/InvalidOperand.php 8&%d ùgÅ«¤+src/Psalm/Issue/NamedArgumentNotAllowed.php®8&%d®2¶G{¤"src/Psalm/Issue/UndefinedTrace.php¡8&%d¡”šÐ$¤.src/Psalm/Issue/UndefinedThisPropertyFetch.php°8&%d°»üôD¤7src/Psalm/Issue/RedundantConditionGivenDocblockType.php—8&%d—ûDþ<¤-src/Psalm/Issue/DocblockTypeContradiction.php8&%d21¤(src/Psalm/Issue/PossiblyInvalidClone.php§8&%d§jíŤ-src/Psalm/Issue/InvalidNullableReturnType.php¬8&%d¬ŸDH¤0src/Psalm/Issue/ReferenceConstraintViolation.php®8&%d®Šš•¤-src/Psalm/Issue/PossiblyUndefinedVariable.php«8&%d«$’¤ src/Psalm/Issue/NullIterator.phpŸ8&%dŸžQyh¤.src/Psalm/Issue/MissingImmutableAnnotation.php‹8&%d‹/üm¤4src/Psalm/Issue/NonInvariantDocblockPropertyType.phpÍ8&%dÍÄ2 ¤!src/Psalm/Issue/PropertyIssue.php„8&%d„äĄ̊¤%src/Psalm/Issue/UndefinedVariable.php¤8&%d¤G6›—¤0src/Psalm/Issue/ConstructorSignatureMismatch.php¯8&%d¯ygÖ¤'src/Psalm/Issue/InvalidFunctionCall.php¥8&%d¥¤ìN¤%src/Psalm/Issue/NullPropertyFetch.php+8&%d+Ÿô¤$src/Psalm/Issue/ImpureMethodCall.php¤8&%d¤Á¯‡¤#src/Psalm/Issue/ComplexFunction.php£8&%d£¥E¡ç¤&src/Psalm/Issue/RawObjectIteration.php¥8&%d¥4Ô@b¤-src/Psalm/Issue/InvalidFalsableReturnType.php¬8&%d¬1Dš¤(src/Psalm/Issue/PossiblyFalseOperand.php§8&%d§µÃΤ+src/Psalm/Issue/MixedReturnTypeCoercion.phpó8&%dó…cÓ+¤!src/Psalm/Issue/ArgumentIssue.phpÈ8&%dÈú”,¤&src/Psalm/Issue/UnusedClosureParam.php¦8&%d¦R 0/¤-src/Psalm/Issue/InaccessibleClassConstant.php¬8&%d¬˜óé¤'src/Psalm/Issue/UnusedPsalmSuppress.php§8&%d§‡Ä¡)¤$src/Psalm/Issue/DeprecatedMethod.php£8&%d£çÂÁé¤#src/Psalm/Issue/NullArrayOffset.php¢8&%d¢Ž€6‚¤7src/Psalm/Issue/PossiblyNullPropertyAssignmentValue.phpº8&%dº Ëý0¤+src/Psalm/Issue/PossiblyInvalidArgument.php­8&%d­o#Ö¤-src/Psalm/Issue/InvalidPropertyAssignment.php«8&%d«&f.ó¤+src/Psalm/Issue/InvalidStaticInvocation.phpª8&%dª®ª ¤#src/Psalm/Issue/MixedMethodCall.phpê8&%dê?Eúͤsrc/Psalm/Issue/RiskyCast.php–8&%d–WÇË–¤5src/Psalm/Issue/MethodSignatureMustOmitReturnType.phpµ8&%dµ©i£¤%src/Psalm/Issue/InvalidReturnType.php£8&%d£(õû—¤$src/Psalm/Issue/IfThisIsMismatch.php£8&%d£aÅ”¤&src/Psalm/Issue/PsalmInternalError.php¦8&%d¦ëÌa3¤&src/Psalm/Issue/PrivateFinalMethod.php¡8&%d¡m›úÿ¤#src/Psalm/Issue/UnevaluatedCode.php¢8&%d¢"î²ô¤$src/Psalm/Issue/UnusedMethodCall.php¦8&%d¦•ër¤$src/Psalm/Issue/NoEnumProperties.php¥8&%d¥ßúû¤,src/Psalm/Issue/MissingClosureReturnType.phpª8&%dªáKI¤src/Psalm/IssueBuffer.php0~8&%d0~VùpL¤&src/Psalm/Report/CodeClimateReport.phpZ 8&%dZ ©É+ ¤%src/Psalm/Report/CheckstyleReport.phpé8&%déîy¬›¤ src/Psalm/Report/CountReport.php8&%dÜEçŤ src/Psalm/Report/SarifReport.php% 8&%d% ­¶ _¤src/Psalm/Report/TextReport.php8&%d’L] ¤&src/Psalm/Report/JsonSummaryReport.phpÅ8&%dÅÃT«Û¤#src/Psalm/Report/PhpStormReport.phpv 8&%dv DK{ç¤"src/Psalm/Report/CompactReport.phpë 8&%dë Å{36¤.src/Psalm/Report/ByIssueLevelAndTypeReport.phpÝ8&%dÝÉ÷;Á¤ src/Psalm/Report/EmacsReport.php98&%d9>BHN¤(src/Psalm/Report/GithubActionsReport.phpm8&%dm””Ø$¤src/Psalm/Report/JsonReport.php8&%dmࢶ¤ src/Psalm/Report/JunitReport.php±8&%d±Ò1¤"src/Psalm/Report/ConsoleReport.php'8&%d' Ï&¤$src/Psalm/Report/SonarqubeReport.php8&%d‡Vˤ!src/Psalm/Report/PylintReport.php+8&%d+%Ö/a¤"src/Psalm/Report/ReportOptions.php\8&%d\bx¤src/Psalm/Report/XmlReport.php•8&%d•ø`0¤#src/Psalm/Internal/VersionUtils.phpê 8&%dê .ÆØ~¤.src/Psalm/Internal/Analyzer/MethodAnalyzer.phpU&8&%dU&¢#䵤/src/Psalm/Internal/Analyzer/CommentAnalyzer.php-<8&%d-<q¤.«¤-src/Psalm/Internal/Analyzer/ClassAnalyzer.php¤(8&%d¤(ûJ(ï¤2src/Psalm/Internal/Analyzer/AttributesAnalyzer.phpe08&%de0 ÅE`¤,src/Psalm/Internal/Analyzer/FileAnalyzer.phpKQ8&%dKQâ¸á¤0src/Psalm/Internal/Analyzer/MethodComparator.phpZŒ8&%dZŒ‹Ë¹_¤.src/Psalm/Internal/Analyzer/SourceAnalyzer.php|8&%d|ÿĉ\¤1src/Psalm/Internal/Analyzer/ClassLikeAnalyzer.phpG\8&%dG\R!±G¤/src/Psalm/Internal/Analyzer/AlgebraAnalyzer.phpú8&%dú'! þ¤0src/Psalm/Internal/Analyzer/FunctionAnalyzer.php®8&%d®ÙœX¤0src/Psalm/Internal/Analyzer/DataFlowNodeData.phpO8&%dOWê‘ܤ9src/Psalm/Internal/Analyzer/Statements/ReturnAnalyzer.phpVT8&%dVTM—›c¤9src/Psalm/Internal/Analyzer/Statements/GlobalAnalyzer.php88&%d8E ªÝ¤7src/Psalm/Internal/Analyzer/Statements/EchoAnalyzer.php 8&%d ,Rz"¤<src/Psalm/Internal/Analyzer/Statements/Block/ForAnalyzer.phpœ8&%dœ‘q+œ¤<src/Psalm/Internal/Analyzer/Statements/Block/TryAnalyzer.phpÄA8&%dÄAò^š¤Csrc/Psalm/Internal/Analyzer/Statements/Block/SwitchCaseAnalyzer.php0X8&%d0X‹í†P¤Fsrc/Psalm/Internal/Analyzer/Statements/Block/IfConditionalAnalyzer.phpå-8&%då-îVˆ¤>src/Psalm/Internal/Analyzer/Statements/Block/WhileAnalyzer.php@8&%d@b¡æ¤;src/Psalm/Internal/Analyzer/Statements/Block/DoAnalyzer.php 8&%d 1”轤?src/Psalm/Internal/Analyzer/Statements/Block/SwitchAnalyzer.php8&%drK:â¤Bsrc/Psalm/Internal/Analyzer/Statements/Block/IfElse/IfAnalyzer.phpÔ?8&%dÔ? û‚q¤Dsrc/Psalm/Internal/Analyzer/Statements/Block/IfElse/ElseAnalyzer.php-8&%d-P®gv¤Fsrc/Psalm/Internal/Analyzer/Statements/Block/IfElse/ElseIfAnalyzer.phpÊ58&%dÊ5aµ>פ=src/Psalm/Internal/Analyzer/Statements/Block/LoopAnalyzer.phpY8&%dYÚîGï¤@src/Psalm/Internal/Analyzer/Statements/Block/ForeachAnalyzer.php Ž8&%d Žì³í~¤?src/Psalm/Internal/Analyzer/Statements/Block/IfElseAnalyzer.phpg48&%dg4Wíã@¤8src/Psalm/Internal/Analyzer/Statements/BreakAnalyzer.php9 8&%d9 È?7X¤8src/Psalm/Internal/Analyzer/Statements/UnsetAnalyzer.phpÐ8&%dÐ^e˘¤8src/Psalm/Internal/Analyzer/Statements/ThrowAnalyzer.phpÐ 8&%dÐ ø{Õ¤9src/Psalm/Internal/Analyzer/Statements/StaticAnalyzer.php| 8&%d| D“X¤csrc/Psalm/Internal/Analyzer/Statements/Expression/Assignment/InstancePropertyAssignmentAnalyzer.php^®8&%d^®è8^¤asrc/Psalm/Internal/Analyzer/Statements/Expression/Assignment/StaticPropertyAssignmentAnalyzer.phpe(8&%de({ÌßB¤Qsrc/Psalm/Internal/Analyzer/Statements/Expression/Assignment/AssignedProperty.phpÎ8&%dÎøÂèŤXsrc/Psalm/Internal/Analyzer/Statements/Expression/Assignment/ArrayAssignmentAnalyzer.php©8&%d©ïѤR¤Csrc/Psalm/Internal/Analyzer/Statements/Expression/CloneAnalyzer.phpg8&%dg€(F¤Csrc/Psalm/Internal/Analyzer/Statements/Expression/PrintAnalyzer.php 8&%d ‡2ƒ¤Csrc/Psalm/Internal/Analyzer/Statements/Expression/ArrayAnalyzer.phpôX8&%dôXëÌ£¤Bsrc/Psalm/Internal/Analyzer/Statements/Expression/CallAnalyzer.phpó“8&%dó“üRy¤Lsrc/Psalm/Internal/Analyzer/Statements/Expression/UnaryPlusMinusAnalyzer.php`8&%d`ÖEØg¤Csrc/Psalm/Internal/Analyzer/Statements/Expression/YieldAnalyzer.php18&%d1⿨õ¤Hsrc/Psalm/Internal/Analyzer/Statements/Expression/AssignmentAnalyzer.phpãï8&%dãïÊ0>p¤Csrc/Psalm/Internal/Analyzer/Statements/Expression/EmptyAnalyzer.php¼8&%d¼˜Ã! ¤Hsrc/Psalm/Internal/Analyzer/Statements/Expression/MagicConstAnalyzer.phpo8&%doü¹Íá¤Bsrc/Psalm/Internal/Analyzer/Statements/Expression/ExitAnalyzer.php\8&%d\=¢Op¤Hsrc/Psalm/Internal/Analyzer/Statements/Expression/BooleanNotAnalyzer.phpÌ8&%dÌ ›¸¤Csrc/Psalm/Internal/Analyzer/Statements/Expression/MatchAnalyzer.phpA%8&%dA%ÌêW˜¤Csrc/Psalm/Internal/Analyzer/Statements/Expression/IssetAnalyzer.phpÈ8&%dÈŸ¦¬¤Esrc/Psalm/Internal/Analyzer/Statements/Expression/IncludeAnalyzer.php^98&%d^9zO4¤Bsrc/Psalm/Internal/Analyzer/Statements/Expression/EvalAnalyzer.php 8&%d ¸]´¤Psrc/Psalm/Internal/Analyzer/Statements/Expression/EncapsulatedStringAnalyzer.php8&%d$)d¥¤Esrc/Psalm/Internal/Analyzer/Statements/Expression/AssertionFinder.php8&%d®{”¤Gsrc/Psalm/Internal/Analyzer/Statements/Expression/SimpleTypeInferer.php³a8&%d³aª=ßï¤Qsrc/Psalm/Internal/Analyzer/Statements/Expression/Fetch/VariableFetchAnalyzer.phpµg8&%dµg¢Â{|¤Wsrc/Psalm/Internal/Analyzer/Statements/Expression/Fetch/AtomicPropertyFetchAnalyzer.php“‹8&%d“‹<ȵ¤Nsrc/Psalm/Internal/Analyzer/Statements/Expression/Fetch/ConstFetchAnalyzer.phpu&8&%du&,ß…¤Nsrc/Psalm/Internal/Analyzer/Statements/Expression/Fetch/ArrayFetchAnalyzer.phpï8&%dïÛ¹(¤Ysrc/Psalm/Internal/Analyzer/Statements/Expression/Fetch/InstancePropertyFetchAnalyzer.phpQ:8&%dQ:+Ö›¤Wsrc/Psalm/Internal/Analyzer/Statements/Expression/Fetch/StaticPropertyFetchAnalyzer.php88&%d8ÎÃФJsrc/Psalm/Internal/Analyzer/Statements/Expression/BinaryOp/AndAnalyzer.php“8&%d“9&䊤Vsrc/Psalm/Internal/Analyzer/Statements/Expression/BinaryOp/NonComparisonOpAnalyzer.php[ 8&%d[ V¿ ¤Isrc/Psalm/Internal/Analyzer/Statements/Expression/BinaryOp/OrAnalyzer.phpZ18&%dZ1w^Þ¦¤Osrc/Psalm/Internal/Analyzer/Statements/Expression/BinaryOp/CoalesceAnalyzer.phpX 8&%dX ç — ¤Ssrc/Psalm/Internal/Analyzer/Statements/Expression/BinaryOp/ArithmeticOpAnalyzer.phpøÁ8&%døÁþêèú¤Msrc/Psalm/Internal/Analyzer/Statements/Expression/BinaryOp/ConcatAnalyzer.phpë>8&%dë>ÆÛ¦¯¤Hsrc/Psalm/Internal/Analyzer/Statements/Expression/ClassConstAnalyzer.php™w8&%d™wM¶'ë¤Jsrc/Psalm/Internal/Analyzer/Statements/Expression/ExpressionIdentifier.php8&%d†õ×9¤Gsrc/Psalm/Internal/Analyzer/Statements/Expression/ArrayCreationInfo.php;8&%d;:–~Ú¤Gsrc/Psalm/Internal/Analyzer/Statements/Expression/YieldFromAnalyzer.phpÔ 8&%dÔ Ã×N¤Bsrc/Psalm/Internal/Analyzer/Statements/Expression/CastAnalyzer.php¹t8&%d¹tÕ7ý3¤Hsrc/Psalm/Internal/Analyzer/Statements/Expression/InstanceofAnalyzer.php 8&%d Óáhá¤Fsrc/Psalm/Internal/Analyzer/Statements/Expression/BinaryOpAnalyzer.phpTF8&%dTFÛž…¤Ysrc/Psalm/Internal/Analyzer/Statements/Expression/Call/ArrayFunctionArgumentsAnalyzer.phpæs8&%dæsôEH‘¤Vsrc/Psalm/Internal/Analyzer/Statements/Expression/Call/ClassTemplateParamCollector.php»$8&%d»$:tã¤hsrc/Psalm/Internal/Analyzer/Statements/Expression/Call/StaticMethod/ExistingAtomicStaticCallAnalyzer.phpiN8&%diNù[T¤`src/Psalm/Internal/Analyzer/Statements/Expression/Call/StaticMethod/AtomicStaticCallAnalyzer.phpÕ‚8&%dÕ‚± ž¤Fsrc/Psalm/Internal/Analyzer/Statements/Expression/Call/NewAnalyzer.php‹m8&%d‹m-Yw¤Ksrc/Psalm/Internal/Analyzer/Statements/Expression/Call/FunctionCallInfo.phpâ8&%dâ„`¹i¤Osrc/Psalm/Internal/Analyzer/Statements/Expression/Call/FunctionCallAnalyzer.phpè‘8&%d葞ö:ˤKsrc/Psalm/Internal/Analyzer/Statements/Expression/Call/ArgumentAnalyzer.php;Ç8&%d;Ǭ9¤}¤Xsrc/Psalm/Internal/Analyzer/Statements/Expression/Call/FunctionCallReturnTypeFetcher.phpc8&%dcÑÉ" ¤Msrc/Psalm/Internal/Analyzer/Statements/Expression/Call/StaticCallAnalyzer.php--8&%d--œ³¤_src/Psalm/Internal/Analyzer/Statements/Expression/Call/Method/MethodCallProhibitionAnalyzer.php¥8&%d¥TÅÓ¤bsrc/Psalm/Internal/Analyzer/Statements/Expression/Call/Method/ExistingAtomicMethodCallAnalyzer.phpœP8&%dœPŽ8†¤Zsrc/Psalm/Internal/Analyzer/Statements/Expression/Call/Method/AtomicMethodCallAnalyzer.phpi8&%diûÏ_¤`src/Psalm/Internal/Analyzer/Statements/Expression/Call/Method/AtomicMethodCallAnalysisResult.phpõ8&%dõa®Õ¤]src/Psalm/Internal/Analyzer/Statements/Expression/Call/Method/MethodCallReturnTypeFetcher.phpmH8&%dmHÇoÍ.¤Zsrc/Psalm/Internal/Analyzer/Statements/Expression/Call/Method/MethodCallPurityAnalyzer.php8&%dúuû¤Zsrc/Psalm/Internal/Analyzer/Statements/Expression/Call/Method/MissingMethodCallHandler.php738&%d73%âB²¤Ssrc/Psalm/Internal/Analyzer/Statements/Expression/Call/Method/AtomicCallContext.phpý8&%dý:ꚃ¤Zsrc/Psalm/Internal/Analyzer/Statements/Expression/Call/Method/MethodVisibilityAnalyzer.php†8&%d†R‡Ðh¤Msrc/Psalm/Internal/Analyzer/Statements/Expression/Call/MethodCallAnalyzer.phpÒ58&%dÒ5”¥`h¤Osrc/Psalm/Internal/Analyzer/Statements/Expression/Call/ArgumentMapPopulator.php{8&%d{ö~Œ;¤Lsrc/Psalm/Internal/Analyzer/Statements/Expression/Call/ArgumentsAnalyzer.php]ê8&%d]êûQ:¿¤Ssrc/Psalm/Internal/Analyzer/Statements/Expression/Call/NamedFunctionCallHandler.phpƒS8&%dƒSŒṳFsrc/Psalm/Internal/Analyzer/Statements/Expression/NullsafeAnalyzer.phpK 8&%dK ¼Æ—’¤Hsrc/Psalm/Internal/Analyzer/Statements/Expression/BitwiseNotAnalyzer.php=8&%d=gs)Á¤Esrc/Psalm/Internal/Analyzer/Statements/Expression/TernaryAnalyzer.php()8&%d()ïXè¤Nsrc/Psalm/Internal/Analyzer/Statements/Expression/IncDecExpressionAnalyzer.php²8&%d²ÁÌG¤=src/Psalm/Internal/Analyzer/Statements/ExpressionAnalyzer.phpÊF8&%dÊF8ü-#¤Bsrc/Psalm/Internal/Analyzer/Statements/UnusedAssignmentRemover.phpz18&%dz1m\ë¤;src/Psalm/Internal/Analyzer/Statements/ContinueAnalyzer.php 8&%d A¢%/¤1src/Psalm/Internal/Analyzer/InterfaceAnalyzer.phpK8&%dK h%¡¤-src/Psalm/Internal/Analyzer/ScopeAnalyzer.phpt68&%dt6úîøG¤2src/Psalm/Internal/Analyzer/StatementsAnalyzer.phpf›8&%df›qdœä¤-src/Psalm/Internal/Analyzer/TraitAnalyzer.phpÖ8&%dÖV r¤(src/Psalm/Internal/Analyzer/CanAlias.php€8&%d€ÙØÛÖ¤?src/Psalm/Internal/Analyzer/FunctionLike/ReturnTypeAnalyzer.phpË{8&%dË{A^ÇA¤@src/Psalm/Internal/Analyzer/FunctionLike/ReturnTypeCollector.phpw!8&%dw!rA%¤4src/Psalm/Internal/Analyzer/FunctionLikeAnalyzer.phpØó8&%dØóâ §¤1src/Psalm/Internal/Analyzer/NamespaceAnalyzer.php(#8&%d(#±z¦U¤,src/Psalm/Internal/Analyzer/TypeAnalyzer.phpõ8&%dõùñž5¤)src/Psalm/Internal/Analyzer/IssueData.php¬ 8&%d¬ ¹·ó¤/src/Psalm/Internal/Analyzer/ProjectAnalyzer.php>§8&%d>§ü7¤4src/Psalm/Internal/Analyzer/ClassLikeNameOptions.phpû8&%dûzh½í¤/src/Psalm/Internal/Analyzer/ClosureAnalyzer.phpß+8&%dß+ÙhmÒ¤)src/Psalm/Internal/Codebase/Functions.phpp[8&%dp[‘{Ϥ.src/Psalm/Internal/Codebase/TaintFlowGraph.php‡<8&%d‡< ¯Œ¤*src/Psalm/Internal/Codebase/Properties.php0)8&%d0)ä ̤'src/Psalm/Internal/Codebase/Methods.phpr8&%drD¤0src/Psalm/Internal/Codebase/VariableUseGraph.php¶8&%d¶ˆŽ& ¤6src/Psalm/Internal/Codebase/InternalCallMapHandler.php948&%d94.Oj¤-src/Psalm/Internal/Codebase/DataFlowGraph.phpR8&%dRšš¤5src/Psalm/Internal/Codebase/ReferenceMapGenerator.php­8&%d­ >¤+src/Psalm/Internal/Codebase/PropertyMap.php¥8&%d¥.¢¤*src/Psalm/Internal/Codebase/Reflection.phpG8&%dG_&ŽÖ¤?src/Psalm/Internal/Codebase/ClassConstantByWildcardResolver.phpà8&%dàH Mƒ¤*src/Psalm/Internal/Codebase/ClassLikes.php“58&%d“5G¤^o¤(src/Psalm/Internal/Codebase/Analyzer.phpÜ8&%dÜÑ£/p¤'src/Psalm/Internal/Codebase/Scanner.php2f8&%d2fËe2í¤)src/Psalm/Internal/Codebase/Populator.phpô›8&%dô›Ùˆž¤4src/Psalm/Internal/Codebase/ConstantTypeResolver.phpÌ,8&%dÌ,‚YU¤Asrc/Psalm/Internal/ExecutionEnvironment/SystemCommandExecutor.phpŒ8&%dŒƤÒÛ¤<src/Psalm/Internal/ExecutionEnvironment/GitInfoCollector.phpë 8&%dë ßfæ¤>src/Psalm/Internal/ExecutionEnvironment/BuildInfoCollector.phpz)8&%dz)-Ì`+¤src/Psalm/Internal/Clause.php€8&%d€á®A«¤5src/Psalm/Internal/TypeVisitor/FromDocblockSetter.php8&%d©è²€¤.src/Psalm/Internal/TypeVisitor/TypeScanner.php 8&%d j …X¤8src/Psalm/Internal/TypeVisitor/ContainsStaticVisitor.phpl8&%dlj\(¤4src/Psalm/Internal/TypeVisitor/ClasslikeReplacer.phpj8&%djá“m¤.src/Psalm/Internal/TypeVisitor/TypeChecker.phpG+8&%dG+-Pòå¤9src/Psalm/Internal/TypeVisitor/ContainsLiteralVisitor.phpù8&%dù_¿¡¤>src/Psalm/Internal/TypeVisitor/CanContainObjectTypeVisitor.phpÃ8&%dÃi,°…¤8src/Psalm/Internal/TypeVisitor/TemplateTypeCollector.php—8&%d—”x,¤0src/Psalm/Internal/TypeVisitor/TypeLocalizer.php# 8&%d# îݤ;src/Psalm/Internal/TypeVisitor/ContainsClassLikeVisitor.php™8&%d™AæW¤3src/Psalm/Internal/Provider/ParserCacheProvider.phpx.8&%dx.£†WM¤Tsrc/Psalm/Internal/Provider/PropertyTypeProvider/DomDocumentPropertyTypeProvider.php£8&%d£Axפ4src/Psalm/Internal/Provider/PropertyTypeProvider.phpÝ8&%dÝx™å¤2src/Psalm/Internal/Provider/StatementsProvider.phpU:8&%dU:èÖËí¤:src/Psalm/Internal/Provider/PropertyVisibilityProvider.php¼8&%d¼@ÃØw¤5src/Psalm/Internal/Provider/FileReferenceProvider.phpŸ8&%dŸ,&$¤)src/Psalm/Internal/Provider/Providers.phpt 8&%dt {¹òO¤0src/Psalm/Internal/Provider/FakeFileProvider.php°8&%d°”ÍŤ8src/Psalm/Internal/Provider/MethodReturnTypeProvider.php2 8&%d2 óßT%¤8src/Psalm/Internal/Provider/MethodVisibilityProvider.phpW8&%dW×ѯ¤3src/Psalm/Internal/Provider/FileStorageProvider.php« 8&%d« æ÷&¤>src/Psalm/Internal/Provider/DynamicFunctionStorageProvider.phpÆ 8&%dÆ O“¤9src/Psalm/Internal/Provider/FunctionExistenceProvider.phpb8&%dbEè¤:src/Psalm/Internal/Provider/FunctionReturnTypeProvider.php-8&%d-L#W¥¤4src/Psalm/Internal/Provider/MethodParamsProvider.php 8&%d ôOVš¤7src/Psalm/Internal/Provider/StatementsVolatileCache.php 8&%d ¦PÛy¤:src/Psalm/Internal/Provider/FileReferenceCacheProvider.phpy†8&%dy†&C!U¤=src/Psalm/Internal/Provider/ClassLikeStorageCacheProvider.phpÐ8&%dÐ}ßÕ°¤0src/Psalm/Internal/Provider/NodeDataProvider.phpƒ8&%dƒ#[Y¤7src/Psalm/Internal/Provider/MethodExistenceProvider.phpj8&%dj,àïï¤9src/Psalm/Internal/Provider/PropertyExistenceProvider.phpœ8&%dœÇ Ÿ¤Csrc/Psalm/Internal/Provider/AddRemoveTaints/HtmlFunctionTainter.phpÍ 8&%dÍ ãŽƒæ¤,src/Psalm/Internal/Provider/FileProvider.phpw8&%dw‚a¤8src/Psalm/Internal/Provider/FileStorageCacheProvider.phpD8&%dDžr+¤8src/Psalm/Internal/Provider/ClassLikeStorageProvider.php¬8&%d¬!~Ò¤6src/Psalm/Internal/Provider/FunctionParamsProvider.phpK8&%dK,™Î8¤4src/Psalm/Internal/Provider/ProjectCacheProvider.php8&%dð.[‘¤Msrc/Psalm/Internal/Provider/ReturnTypeProvider/ParseUrlReturnTypeProvider.php"8&%d"syhu¤Qsrc/Psalm/Internal/Provider/ReturnTypeProvider/TriggerErrorReturnTypeProvider.php² 8&%d² P±…$¤Tsrc/Psalm/Internal/Provider/ReturnTypeProvider/IteratorToArrayReturnTypeProvider.php¶8&%d¶¢—¸•¤Qsrc/Psalm/Internal/Provider/ReturnTypeProvider/ArrayCombineReturnTypeProvider.php_8&%d_kz#ؤSsrc/Psalm/Internal/Provider/ReturnTypeProvider/VersionCompareReturnTypeProvider.php 8&%d ­Nu¤Psrc/Psalm/Internal/Provider/ReturnTypeProvider/ArrayFilterReturnTypeProvider.php%8&%d%à• ¤Ssrc/Psalm/Internal/Provider/ReturnTypeProvider/DateTimeModifyReturnTypeProvider.phpU8&%dU YY¤Ksrc/Psalm/Internal/Provider/ReturnTypeProvider/MktimeReturnTypeProvider.phpB8&%dBZOß÷¤Rsrc/Psalm/Internal/Provider/ReturnTypeProvider/ArrayFillKeysReturnTypeProvider.php8 8&%d8 èì+]¤Nsrc/Psalm/Internal/Provider/ReturnTypeProvider/FilterVarReturnTypeProvider.phpi8&%dié¨BI¤Wsrc/Psalm/Internal/Provider/ReturnTypeProvider/MbInternalEncodingReturnTypeProvider.php4 8&%d4 ? _¤Msrc/Psalm/Internal/Provider/ReturnTypeProvider/ArrayMapReturnTypeProvider.phpB8&%dBÁÀˤVsrc/Psalm/Internal/Provider/ReturnTypeProvider/ImagickPixelColorReturnTypeProvider.phpñ 8&%dñ ¯ƒt„¤Osrc/Psalm/Internal/Provider/ReturnTypeProvider/ArraySliceReturnTypeProvider.php° 8&%d° ¢Ø'¤Tsrc/Psalm/Internal/Provider/ReturnTypeProvider/GetClassMethodsReturnTypeProvider.phpz8&%dz¯9å¤Xsrc/Psalm/Internal/Provider/ReturnTypeProvider/ClosureFromCallableReturnTypeProvider.phpÒ8&%dÒ'B¤Qsrc/Psalm/Internal/Provider/ReturnTypeProvider/ArrayReverseReturnTypeProvider.php2 8&%d2 ÿD ½¤Ksrc/Psalm/Internal/Provider/ReturnTypeProvider/MinMaxReturnTypeProvider.phpx8&%dxms.¤Osrc/Psalm/Internal/Provider/ReturnTypeProvider/ArrayChunkReturnTypeProvider.php8&%dït«2¤Rsrc/Psalm/Internal/Provider/ReturnTypeProvider/GetObjectVarsReturnTypeProvider.phpý8&%dýY ‘Œ¤Qsrc/Psalm/Internal/Provider/ReturnTypeProvider/PdoStatementReturnTypeProvider.php§ 8&%d§ ¢æ¤Esrc/Psalm/Internal/Provider/ReturnTypeProvider/DomNodeAppendChild.phpa8&%da4Œx¤Psrc/Psalm/Internal/Provider/ReturnTypeProvider/ArrayColumnReturnTypeProvider.php%8&%d%»\~ì¤Psrc/Psalm/Internal/Provider/ReturnTypeProvider/ArraySpliceReturnTypeProvider.php®8&%d®HÍ ³¤Jsrc/Psalm/Internal/Provider/ReturnTypeProvider/StrTrReturnTypeProvider.php“8&%d“û±TÒ¤Osrc/Psalm/Internal/Provider/ReturnTypeProvider/StrReplaceReturnTypeProvider.php\ 8&%d\ )§ñ"¤Msrc/Psalm/Internal/Provider/ReturnTypeProvider/ArrayPopReturnTypeProvider.php¡ 8&%d¡ Ócw>¤Msrc/Psalm/Internal/Provider/ReturnTypeProvider/BasenameReturnTypeProvider.phpà8&%dàxZc¤Msrc/Psalm/Internal/Provider/ReturnTypeProvider/ArrayPadReturnTypeProvider.php´8&%d´~9hV¤Ssrc/Psalm/Internal/Provider/ReturnTypeProvider/FirstArgStringReturnTypeProvider.phpÂ8&%dÂB¹Œ¤[src/Psalm/Internal/Provider/ReturnTypeProvider/ArrayPointerAdjustmentReturnTypeProvider.php×8&%d×XJê¤Ksrc/Psalm/Internal/Provider/ReturnTypeProvider/HexdecReturnTypeProvider.phpR8&%dRê²È¤Ksrc/Psalm/Internal/Provider/ReturnTypeProvider/PdoStatementSetFetchMode.php3 8&%d3 KÖ°·¤Osrc/Psalm/Internal/Provider/ReturnTypeProvider/ArrayMergeReturnTypeProvider.php'8&%d'ïó{¨¤Lsrc/Psalm/Internal/Provider/ReturnTypeProvider/InArrayReturnTypeProvider.php_ 8&%d_ òv®¡¤Isrc/Psalm/Internal/Provider/ReturnTypeProvider/RandReturnTypeProvider.phpE8&%dEËu Z¤Jsrc/Psalm/Internal/Provider/ReturnTypeProvider/RoundReturnTypeProvider.php7 8&%d7 p‚³¤Lsrc/Psalm/Internal/Provider/ReturnTypeProvider/DirnameReturnTypeProvider.phpx8&%dxO[Æå¤Nsrc/Psalm/Internal/Provider/ReturnTypeProvider/ArrayFillReturnTypeProvider.phpÉ8&%dɪ¡Šó¤Hsrc/Psalm/Internal/Provider/ReturnTypeProvider/SimpleXmlElementAsXml.php<8&%d<-^¬¤Nsrc/Psalm/Internal/Provider/ReturnTypeProvider/ArrayRandReturnTypeProvider.phpz8&%dzhU \¤Psrc/Psalm/Internal/Provider/ReturnTypeProvider/ArrayReduceReturnTypeProvider.phpÜ$8&%dÜ$Ífʤsrc/Psalm/Internal/CliUtils.phpB?8&%dB? Mÿ¤src/Psalm/Internal/Composer.phpj8&%djü£p’¤$src/Psalm/Internal/RuntimeCaches.php’8&%d’vŤsrc/Psalm/Internal/Algebra.phpOV8&%dOVôK’¤)src/Psalm/Internal/Scope/FinallyScope.phpt8&%dtµ,Ž[¤/src/Psalm/Internal/Scope/IfConditionalScope.php]8&%d]•ž9g¤&src/Psalm/Internal/Scope/LoopScope.phpÄ8&%dÄ؉ç+¤$src/Psalm/Internal/Scope/IfScope.php¦8&%d¦É£‚—¤(src/Psalm/Internal/Scope/SwitchScope.php—8&%d—tÖ„¤&src/Psalm/Internal/Scope/CaseScope.phpÃ8&%dÚÔs¤$src/Psalm/Internal/DataFlow/Path.php8&%d£¥È¤+src/Psalm/Internal/DataFlow/TaintSource.php„8&%d„Wǽ¤,src/Psalm/Internal/DataFlow/DataFlowNode.phpX 8&%dX ]ûËH¤)src/Psalm/Internal/DataFlow/TaintSink.php‚8&%d‚Ëœ™¤.src/Psalm/Internal/LanguageServer/Progress.phpÎ8&%dÎ/ M¤-src/Psalm/Internal/LanguageServer/Message.phpD8&%dDלJ¤4src/Psalm/Internal/LanguageServer/ProtocolReader.php<8&%d<o1Ëf¤9src/Psalm/Internal/LanguageServer/ClientConfiguration.php™ 8&%d™ „¥+»¤Bsrc/Psalm/Internal/LanguageServer/Provider/ParserCacheProvider.phpk 8&%dk ±1ˤIsrc/Psalm/Internal/LanguageServer/Provider/FileReferenceCacheProvider.phpñ8&%dñªeLsrc/Psalm/Internal/LanguageServer/Provider/ClassLikeStorageCacheProvider.phpÎ8&%dÎ𤜤Gsrc/Psalm/Internal/LanguageServer/Provider/FileStorageCacheProvider.php”8&%d”c}Ú¤Csrc/Psalm/Internal/LanguageServer/Provider/ProjectCacheProvider.php8&%d-„N¤/src/Psalm/Internal/LanguageServer/Reference.php©8&%d©MN´ç¤8src/Psalm/Internal/LanguageServer/PHPMarkdownContent.phpc8&%dcýÚr¤4src/Psalm/Internal/LanguageServer/LanguageServer.phpOŒ8&%dOŒ¾×Ù¤1src/Psalm/Internal/LanguageServer/IdGenerator.phpO8&%dOÂ5ÙF¤6src/Psalm/Internal/LanguageServer/Server/Workspace.php8&%däÞIƒ¤9src/Psalm/Internal/LanguageServer/Server/TextDocument.phpöF8&%döF4i¾¦¤2src/Psalm/Internal/LanguageServer/EmitterTrait.php8&%dúŸm¤6src/Psalm/Internal/LanguageServer/EmitterInterface.php×8&%d×Òx0¤4src/Psalm/Internal/LanguageServer/ProtocolWriter.php8&%d¢r‚\¤3src/Psalm/Internal/LanguageServer/ClientHandler.php’ 8&%d’ ß"/+¤:src/Psalm/Internal/LanguageServer/ProtocolStreamWriter.phpŸ8&%dŸA˜4¤6src/Psalm/Internal/LanguageServer/Client/Workspace.php8&%d¸åR|¤9src/Psalm/Internal/LanguageServer/Client/TextDocument.php8&%dDuC¤:src/Psalm/Internal/LanguageServer/ProtocolStreamReader.phpY8&%dYÁÉ$q¤4src/Psalm/Internal/LanguageServer/LanguageClient.php·8&%d·º˜,Τ1src/Psalm/Internal/PluginManager/ComposerLock.php 8&%d r‘÷¡¤/src/Psalm/Internal/PluginManager/ConfigFile.phpr8&%drñB¸¤/src/Psalm/Internal/PluginManager/PluginList.phpð 8&%dð îØÉI¤6src/Psalm/Internal/PluginManager/PluginListFactory.php 8&%d Æì–¤8src/Psalm/Internal/PluginManager/Command/ShowCommand.php¦ 8&%d¦ GuÚ¤;src/Psalm/Internal/PluginManager/Command/DisableCommand.php 8&%d t5ap¤:src/Psalm/Internal/PluginManager/Command/EnableCommand.php 8&%d U$äN¤%src/Psalm/Internal/Diff/AstDiffer.php] 8&%d] -bL¤&src/Psalm/Internal/Diff/FileDiffer.php—!8&%d—!HÇô¤1src/Psalm/Internal/Diff/ClassStatementsDiffer.phpk%8&%dk%”Kà/¤$src/Psalm/Internal/Diff/DiffElem.php$8&%d$ó [;¤5src/Psalm/Internal/Diff/NamespaceStatementsDiffer.phpç8&%dçÚÞlD¤0src/Psalm/Internal/Diff/FileStatementsDiffer.phpš8&%dšâ"–•¤2src/Psalm/Internal/Scanner/PhpStormMetaScanner.phpu88&%du8{À·¤6src/Psalm/Internal/Scanner/FunctionDocblockComment.php8&%d²°‘¤-src/Psalm/Internal/Scanner/DocblockParser.php&8&%d&[¦‡¯¤>src/Psalm/Internal/Scanner/UnresolvedConstant/KeyValuePair.phpê8&%dêü&0¤:src/Psalm/Internal/Scanner/UnresolvedConstant/Constant.php½8&%d½qM† ¤Dsrc/Psalm/Internal/Scanner/UnresolvedConstant/UnresolvedBinaryOp.phpF8&%dFøÕ–äFsrc/Psalm/Internal/Scanner/UnresolvedConstant/UnresolvedBitwiseAnd.phpË8&%dËÓB˜¤=src/Psalm/Internal/Scanner/UnresolvedConstant/ScalarValue.php8&%d\=¤Esrc/Psalm/Internal/Scanner/UnresolvedConstant/UnresolvedBitwiseOr.phpÊ8&%dÊÃU츤?src/Psalm/Internal/Scanner/UnresolvedConstant/ClassConstant.php’8&%d’…ÇŒa¤<src/Psalm/Internal/Scanner/UnresolvedConstant/ArrayValue.phpÀ8&%dÀ’i¤Csrc/Psalm/Internal/Scanner/UnresolvedConstant/UnresolvedTernary.php§8&%d§5ò¤Isrc/Psalm/Internal/Scanner/UnresolvedConstant/UnresolvedSubtractionOp.php 8&%d ¯èp?¤Fsrc/Psalm/Internal/Scanner/UnresolvedConstant/UnresolvedAdditionOp.phpË8&%dË…ºÜƒ¤Bsrc/Psalm/Internal/Scanner/UnresolvedConstant/ArrayOffsetFetch.phpí8&%díž_µ¤Dsrc/Psalm/Internal/Scanner/UnresolvedConstant/UnresolvedConcatOp.php8&%d‹¾å¤Fsrc/Psalm/Internal/Scanner/UnresolvedConstant/UnresolvedBitwiseXor.phpË8&%dËra2ä¤Lsrc/Psalm/Internal/Scanner/UnresolvedConstant/UnresolvedMultiplicationOp.php#8&%d#§ñê¤Fsrc/Psalm/Internal/Scanner/UnresolvedConstant/UnresolvedDivisionOp.php8&%dRB"¤=src/Psalm/Internal/Scanner/UnresolvedConstant/ArraySpread.phpv8&%dvº­Y½¤-src/Psalm/Internal/Scanner/ParsedDocblock.phpá 8&%dá ~26ޤ7src/Psalm/Internal/Scanner/ClassLikeDocblockComment.php†8&%d†µ> ¦¤:src/Psalm/Internal/Scanner/UnresolvedConstantComponent.phpÔ8&%dÔ™“C˜¤1src/Psalm/Internal/Scanner/VarDocblockComment.php=8&%d=™iÒä¤*src/Psalm/Internal/Scanner/FileScanner.php” 8&%d” û\Ť/src/Psalm/Internal/Algebra/FormulaGenerator.phps08&%ds062Ûw¤5src/Psalm/Internal/FileManipulation/CodeMigration.php8&%d¦‹e™¤>src/Psalm/Internal/FileManipulation/FileManipulationBuffer.phpÁ8&%dÁïÙPÖ¤Csrc/Psalm/Internal/FileManipulation/FunctionDocblockManipulator.php{J8&%d{J°çÖ¤Csrc/Psalm/Internal/FileManipulation/PropertyDocblockManipulator.phpÃ8&%dÃ)f£?¤@src/Psalm/Internal/FileManipulation/ClassDocblockManipulator.php´ 8&%d´ ºj‹¤#src/Psalm/Internal/Cli/Refactor.php''8&%d''¨j2¤)src/Psalm/Internal/Cli/LanguageServer.php /8&%d / ZƒÁ¤ src/Psalm/Internal/Cli/Psalm.phpz¦8&%dz¦–âYE¤!src/Psalm/Internal/Cli/Plugin.php"8&%d"N=f¤"src/Psalm/Internal/Cli/Psalter.php%J8&%d%J¼·y]¤3src/Psalm/Internal/PhpTraverser/CustomTraverser.php8&%dæšÛ¤+src/Psalm/Internal/Type/TypeCombination.phpŠ 8&%dŠ óN$2¤5src/Psalm/Internal/Type/SimpleAssertionReconciler.phpBM8&%dBMÆ¥DM¤4src/Psalm/Internal/Type/ParseTree/TemplateIsTree.phpX8&%dXˆDâ¤/src/Psalm/Internal/Type/ParseTree/UnionTree.php8&%dØòZ¤7src/Psalm/Internal/Type/ParseTree/IndexedAccessTree.phpG8&%dG=q S¤6src/Psalm/Internal/Type/ParseTree/IntersectionTree.php–8&%d–¶JðJ¤>src/Psalm/Internal/Type/ParseTree/MethodWithReturnTypeTree.phpž8&%dž½2†Ë¤1src/Psalm/Internal/Type/ParseTree/GenericTree.phpg8&%dgS±8¤7src/Psalm/Internal/Type/ParseTree/CallableParamTree.phpâ8&%dâ·[ì<¤5src/Psalm/Internal/Type/ParseTree/ConditionalTree.php£8&%d£'am.¤4src/Psalm/Internal/Type/ParseTree/KeyedArrayTree.phpj8&%dj™u«¤4src/Psalm/Internal/Type/ParseTree/TemplateAsTree.php”8&%d”Ö_ªA¤2src/Psalm/Internal/Type/ParseTree/CallableTree.phph8&%dhú¨ë¤+src/Psalm/Internal/Type/ParseTree/Value.phpU8&%dU°ã¢r¤3src/Psalm/Internal/Type/ParseTree/FieldEllipsis.php“8&%d“ÍsÜ)¤0src/Psalm/Internal/Type/ParseTree/MethodTree.php@8&%d@(0£¤5src/Psalm/Internal/Type/ParseTree/MethodParamTree.phpö8&%döHvÐo¤7src/Psalm/Internal/Type/ParseTree/EncapsulationTree.php½8&%d½/Bñ¤<src/Psalm/Internal/Type/ParseTree/KeyedArrayPropertyTree.phpL8&%dL ”ÎÞ¤*src/Psalm/Internal/Type/ParseTree/Root.phpŠ8&%dŠÓÁ¤2src/Psalm/Internal/Type/ParseTree/NullableTree.php’8&%d’l¾v¤@src/Psalm/Internal/Type/ParseTree/CallableWithReturnTypeTree.php 8&%d Î“Û¤&src/Psalm/Internal/Type/TypeParser.php–³8&%d–³2œ‘ž¤(src/Psalm/Internal/Type/TypeCombiner.phpýÛ8&%dýÛß`cϤ%src/Psalm/Internal/Type/ParseTree.php~8&%d~U-nŸ¤/src/Psalm/Internal/Type/AssertionReconciler.php¯Ã8&%d¯Ã$îa¯¤*src/Psalm/Internal/Type/TemplateResult.php—8&%d—ª¬›«¤%src/Psalm/Internal/Type/ArrayType.phpÚ8&%dÚ FÒN¤)src/Psalm/Internal/Type/TypeTokenizer.php¹58&%d¹5ƒÇÓÀ¤)src/Psalm/Internal/Type/TemplateBound.php{8&%d{óÏi¤7src/Psalm/Internal/Type/TypeAlias/LinkableTypeAlias.php68&%d6°± –¤5src/Psalm/Internal/Type/TypeAlias/InlineTypeAlias.phpH8&%dHdƒ~?¤4src/Psalm/Internal/Type/TypeAlias/ClassTypeAlias.phpÚ8&%dÚ3ûçr¤%src/Psalm/Internal/Type/TypeAlias.php?8&%d?¦4÷†¤;src/Psalm/Internal/Type/Comparator/AtomicTypeComparator.phpÛa8&%dÛa yÙw¤:src/Psalm/Internal/Type/Comparator/UnionTypeComparator.php;C8&%d;C*§€w¤=src/Psalm/Internal/Type/Comparator/IntegerRangeComparator.phpÎ8&%dÎí  ø¤:src/Psalm/Internal/Type/Comparator/ArrayTypeComparator.php÷8&%d÷0îõ¸¤;src/Psalm/Internal/Type/Comparator/KeyedArrayComparator.php£%8&%d£%,‹âÙ¤;src/Psalm/Internal/Type/Comparator/TypeComparisonResult.phpV8&%dVæ7R1¤7src/Psalm/Internal/Type/Comparator/ObjectComparator.phpø18&%dø12KÈý¤@src/Psalm/Internal/Type/Comparator/ClassLikeStringComparator.php¡ 8&%d¡ *Òï¤;src/Psalm/Internal/Type/Comparator/ScalarTypeComparator.php6F8&%d6FxŸôº¤<src/Psalm/Internal/Type/Comparator/GenericTypeComparator.phpe8&%deÈ ‘„¤=src/Psalm/Internal/Type/Comparator/CallableTypeComparator.php|A8&%d|A›£,¤8src/Psalm/Internal/Type/TemplateInferredTypeReplacer.php¯A8&%d¯AM3š¤(src/Psalm/Internal/Type/TypeExpander.php8&%d’ê!õ¤7src/Psalm/Internal/Type/TemplateStandinTypeReplacer.phpû¡8&%dû¡zå ¤,src/Psalm/Internal/Type/ParseTreeCreator.phpµg8&%dµgøÊùŒ¤6src/Psalm/Internal/Type/NegatedAssertionReconciler.php=8&%d=òs~#¤<src/Psalm/Internal/Type/SimpleNegatedAssertionReconciler.phpVã8&%dVãñlt¤ src/Psalm/Internal/Json/Json.php¼8&%d¼x×=î¤'src/Psalm/Internal/Fork/ForkMessage.phpA8&%dA­ü•¶¤3src/Psalm/Internal/Fork/ForkProcessErrorMessage.phpl8&%dlSê*¤/src/Psalm/Internal/Fork/ForkTaskDoneMessage.phpŽ8&%dŽ8â%¤ src/Psalm/Internal/Fork/Pool.phprB8&%drBÝvã>¤2src/Psalm/Internal/Fork/ForkProcessDoneMessage.php‘8&%d‘÷ª=¤*src/Psalm/Internal/Fork/PsalmRestarter.phpZ8&%dZØ\-ç¤5src/Psalm/Internal/Stubs/Generator/StubsGenerator.php3.8&%d3.µºÒ¤=src/Psalm/Internal/Stubs/Generator/ClassLikeStubGenerator.phpP"8&%dP"î6¤&src/Psalm/Internal/EventDispatcher.php78&%d7J‘¿v¤'src/Psalm/Internal/MethodIdentifier.phpH8&%dHÄqÌH¤*src/Psalm/Internal/ReferenceConstraint.phpÑ8&%dÑz6Âɤ'src/Psalm/Internal/IncludeCollector.php8&%dµáù¤#src/Psalm/Internal/ErrorHandler.phpA 8&%dA ßNu¤4src/Psalm/Internal/PhpVisitor/YieldTypeCollector.phpÏ8&%dÏ¡Eg¤6src/Psalm/Internal/PhpVisitor/OffsetShifterVisitor.php–8&%d–`úÇ8¤4src/Psalm/Internal/PhpVisitor/NodeCounterVisitor.php:8&%d:6俤4src/Psalm/Internal/PhpVisitor/TypeMappingVisitor.php`8&%d`C j¤2src/Psalm/Internal/PhpVisitor/ReflectorVisitor.phpU8&%dU$%Òú¤4src/Psalm/Internal/PhpVisitor/NodeCleanerVisitor.phpc8&%dcù,=<¤4src/Psalm/Internal/PhpVisitor/SimpleNameResolver.phpY8&%dY癤Csrc/Psalm/Internal/PhpVisitor/Reflector/FunctionLikeNodeScanner.phpå8&%dåy¡]¤<src/Psalm/Internal/PhpVisitor/Reflector/TypeHintResolver.phpc8&%dcKîk¤=src/Psalm/Internal/PhpVisitor/Reflector/ExpressionScanner.php,8&%d, Cª¤=src/Psalm/Internal/PhpVisitor/Reflector/AttributeResolver.phpÙ8&%dÙÿÙ·…¤Gsrc/Psalm/Internal/PhpVisitor/Reflector/FunctionLikeDocblockScanner.php½8&%d½-7£¤Csrc/Psalm/Internal/PhpVisitor/Reflector/ClassLikeDocblockParser.phpùO8&%dùOÛÊæo¤>src/Psalm/Internal/PhpVisitor/Reflector/ExpressionResolver.phpr<8&%dr<r/씤Fsrc/Psalm/Internal/PhpVisitor/Reflector/FunctionLikeDocblockParser.phpdb8&%ddbk¤¤@src/Psalm/Internal/PhpVisitor/Reflector/ClassLikeNodeScanner.phpÍ8&%d͘ޱ¤6src/Psalm/Internal/PhpVisitor/PartialParserVisitor.phpX38&%dX3ü®©¤9src/Psalm/Internal/PhpVisitor/ConditionCloningVisitor.php‚8&%d‚Vˆ`0¤0src/Psalm/Internal/PhpVisitor/CloningVisitor.php8&%d9d¡˜¤9src/Psalm/Internal/PhpVisitor/ParamReplacementVisitor.php° 8&%d° ÉL:¤5src/Psalm/Internal/PhpVisitor/ShortClosureVisitor.php­8&%d­Ÿ¤ÇÖ¤9src/Psalm/Internal/PhpVisitor/CheckTrivialExprVisitor.phpÐ 8&%dÐ üÒÜ–¤-src/Psalm/Internal/PhpVisitor/TraitFinder.phph 8&%dh 'ÌŠ_¤6src/Psalm/Internal/PhpVisitor/AssignmentMapVisitor.php»8&%d»Éá]H¤/src/Psalm/Exception/UnanalyzedFileException.phpl8&%dlæPŸ>¤,src/Psalm/Exception/FileIncludeException.phpi8&%diJÈݤ9src/Psalm/Exception/InvalidClasslikeOverrideException.phpv8&%dvdÍ>¤%src/Psalm/Exception/CodeException.phpb8&%dbœÞ'$¤'src/Psalm/Exception/ConfigException.php^8&%d^·ÚÔG¤5src/Psalm/Exception/UnresolvableConstantException.phpŽ8&%dŽ%ÝФ5src/Psalm/Exception/UnpopulatedClasslikeException.phpq8&%dq¹š»’¤6src/Psalm/Exception/UnsupportedIssueToFixException.phps8&%dsÈ<‹¤.src/Psalm/Exception/TypeParseTreeException.phpk8&%dkš˜È¤3src/Psalm/Exception/UnpreparedAnalysisException.phpp8&%dp 2*\¤2src/Psalm/Exception/IncorrectDocblockException.php~8&%d~ó÷Þ¤.src/Psalm/Exception/ScopeAnalysisException.phpk8&%dk“»Ug¤6src/Psalm/Exception/ComplicatedExpressionException.phps8&%dsª{?u¤/src/Psalm/Exception/ConfigNotFoundException.phpt8&%dtì=gø¤2src/Psalm/Exception/CircularReferenceException.phpo8&%do9Ø»¤.src/Psalm/Exception/DocblockParseException.phpe8&%de£^Ù¤)src/Psalm/Exception/RefactorException.phpf8&%dfú>Rh¤/src/Psalm/Exception/ConfigCreationException.phpl8&%dlÈ2#„¤6src/Psalm/Exception/InvalidMethodOverrideException.phps8&%ds§•¤src/Psalm/CodeLocation/Raw.phpî8&%dî4uä¤/src/Psalm/CodeLocation/DocblockTypeLocation.php8&%dÈóàK¤-src/Psalm/CodeLocation/ParseErrorLocation.php8&%d³ œ¤(src/Psalm/PluginFileExtensionsSocket.php­ 8&%d­ _¤!src/Psalm/Config/IssueHandler.php8&%d²äç¤&src/Psalm/Config/ProjectFileFilter.phpü 8&%dü Å&”¸¤)src/Psalm/Config/ErrorLevelFileFilter.phpŠ8&%dŠâ´YǤsrc/Psalm/Config/FileFilter.phpÃH8&%dÃH/¸z¤src/Psalm/Config/Creator.phpÅ 8&%dÅ ‰¶ª=¤,src/Psalm/Config/TaintAnalysisFileFilter.phpz8&%dz" Ȥ2src/Psalm/Plugin/PluginFileExtensionsInterface.php8&%dþ–¤+src/Psalm/Plugin/DynamicFunctionStorage.php8&%d¯2’¤,src/Psalm/Plugin/DynamicTemplateProvider.phpš8&%dšJޤ*src/Psalm/Plugin/RegistrationInterface.php÷8&%d÷žç%Õ¤.src/Psalm/Plugin/PluginEntryPointInterface.phpþ8&%dþ•“‚¤Bsrc/Psalm/Plugin/EventHandler/AfterExpressionAnalysisInterface.phpc8&%dc€(˜u¤Isrc/Psalm/Plugin/EventHandler/AfterEveryFunctionCallAnalysisInterface.php8&%d7œt¤Dsrc/Psalm/Plugin/EventHandler/AfterFunctionCallAnalysisInterface.php8&%d,êÛâ¤>src/Psalm/Plugin/EventHandler/AfterClassLikeVisitInterface.phpQ8&%dQÝ·À¤Dsrc/Psalm/Plugin/EventHandler/AfterFunctionLikeAnalysisInterface.phpf8&%df›4`£¤Bsrc/Psalm/Plugin/EventHandler/AfterMethodCallAnalysisInterface.phpþ8&%dþÔÓð<¤<src/Psalm/Plugin/EventHandler/StringInterpreterInterface.phpW8&%dWn2Œ«¤8src/Psalm/Plugin/EventHandler/AfterAnalysisInterface.php8&%dAŸXû¤Bsrc/Psalm/Plugin/EventHandler/MethodExistenceProviderInterface.php‹8&%d‹ºù'…¤Asrc/Psalm/Plugin/EventHandler/AfterClassLikeAnalysisInterface.php›8&%d›ìËM7¤Bsrc/Psalm/Plugin/EventHandler/BeforeStatementAnalysisInterface.php 8&%d Vìí&¤Gsrc/Psalm/Plugin/EventHandler/AfterClassLikeExistenceCheckInterface.php8&%d<‚=¶¤?src/Psalm/Plugin/EventHandler/PropertyTypeProviderInterface.phpj8&%djYÞ¨ý¤Esrc/Psalm/Plugin/EventHandler/FunctionReturnTypeProviderInterface.phpÃ8&%dÃÛs¤9src/Psalm/Plugin/EventHandler/BeforeAddIssueInterface.phpç8&%dç±Ù¡E¤Asrc/Psalm/Plugin/EventHandler/FunctionParamsProviderInterface.phpÎ8&%dξU—¤Isrc/Psalm/Plugin/EventHandler/DynamicFunctionStorageProviderInterface.phpÐ8&%dÐ7ƒß¤Csrc/Psalm/Plugin/EventHandler/MethodVisibilityProviderInterface.php_8&%d_¯»¿ð¤Csrc/Psalm/Plugin/EventHandler/MethodReturnTypeProviderInterface.php²8&%d²Ùà ¤Asrc/Psalm/Plugin/EventHandler/AfterCodebasePopulatedInterface.php”8&%d”+m7·¤?src/Psalm/Plugin/EventHandler/MethodParamsProviderInterface.php¿8&%d¿§ƒÊ«¤Asrc/Psalm/Plugin/EventHandler/AfterStatementAnalysisInterface.php]8&%d]Á¸&¤4src/Psalm/Plugin/EventHandler/AddTaintsInterface.php78&%d7°Óñh¤7src/Psalm/Plugin/EventHandler/RemoveTaintsInterface.php?8&%d?Á暤Csrc/Psalm/Plugin/EventHandler/Event/AfterClassLikeAnalysisEvent.php58&%d5©Nž¤Csrc/Psalm/Plugin/EventHandler/Event/FunctionParamsProviderEvent.php¶8&%d¶ŠÝ ¤Dsrc/Psalm/Plugin/EventHandler/Event/BeforeStatementAnalysisEvent.php&8&%d&‚°õ&¤Ksrc/Psalm/Plugin/EventHandler/Event/DynamicFunctionStorageProviderEvent.phpg8&%dgi|Ô\¤<src/Psalm/Plugin/EventHandler/Event/AddRemoveTaintsEvent.php:8&%d:QÀ~¤;src/Psalm/Plugin/EventHandler/Event/BeforeAddIssueEvent.phpÕ8&%dÕ· A–¤Esrc/Psalm/Plugin/EventHandler/Event/MethodReturnTypeProviderEvent.phpà 8&%dÃ Ž…ƤAsrc/Psalm/Plugin/EventHandler/Event/MethodParamsProviderEvent.phpõ8&%dõßÕ²¤@src/Psalm/Plugin/EventHandler/Event/AfterClassLikeVisitEvent.php–8&%d–Kü–¿¤>src/Psalm/Plugin/EventHandler/Event/AfterFileAnalysisEvent.php¶8&%d¶;&¸¤Csrc/Psalm/Plugin/EventHandler/Event/AfterStatementAnalysisEvent.php¦8&%d¦yWb™¤Fsrc/Psalm/Plugin/EventHandler/Event/FunctionExistenceProviderEvent.php¨8&%d¨C‘¤Gsrc/Psalm/Plugin/EventHandler/Event/PropertyVisibilityProviderEvent.php€8&%d€3å¤Ksrc/Psalm/Plugin/EventHandler/Event/AfterEveryFunctionCallAnalysisEvent.phpÕ8&%dÕª;¤Isrc/Psalm/Plugin/EventHandler/Event/AfterClassLikeExistenceCheckEvent.php²8&%d²>§Û¤Dsrc/Psalm/Plugin/EventHandler/Event/MethodExistenceProviderEvent.phpŒ8&%dŒ&‡¿¤Asrc/Psalm/Plugin/EventHandler/Event/PropertyTypeProviderEvent.php›8&%d›õKb¤Gsrc/Psalm/Plugin/EventHandler/Event/FunctionReturnTypeProviderEvent.php8&%d_4x·¤>src/Psalm/Plugin/EventHandler/Event/StringInterpreterEvent.phpd8&%dd”la¤Dsrc/Psalm/Plugin/EventHandler/Event/AfterMethodCallAnalysisEvent.php© 8&%d© Õ$añ¤Fsrc/Psalm/Plugin/EventHandler/Event/AfterFunctionCallAnalysisEvent.phpÏ8&%dÏg'’̤:src/Psalm/Plugin/EventHandler/Event/AfterAnalysisEvent.phpß8&%d߭鿤Fsrc/Psalm/Plugin/EventHandler/Event/AfterFunctionLikeAnalysisEvent.php' 8&%d' $Çÿ/¤Esrc/Psalm/Plugin/EventHandler/Event/MethodVisibilityProviderEvent.php 8&%d éíÖ“¤?src/Psalm/Plugin/EventHandler/Event/BeforeFileAnalysisEvent.php‡8&%d‡ó•焤Dsrc/Psalm/Plugin/EventHandler/Event/AfterExpressionAnalysisEvent.php©8&%d©™XÁî¤Csrc/Psalm/Plugin/EventHandler/Event/AfterCodebasePopulatedEvent.php©8&%d©¹@÷$¤Fsrc/Psalm/Plugin/EventHandler/Event/PropertyExistenceProviderEvent.phpÕ8&%dÕbAû]¤<src/Psalm/Plugin/EventHandler/AfterFileAnalysisInterface.php!8&%d!‹¶ço¤Dsrc/Psalm/Plugin/EventHandler/PropertyExistenceProviderInterface.php™8&%d™Ëä+Ǥ=src/Psalm/Plugin/EventHandler/BeforeFileAnalysisInterface.php&8&%d&ã ‘5¤Dsrc/Psalm/Plugin/EventHandler/FunctionExistenceProviderInterface.php•8&%d•^I¸*¤Esrc/Psalm/Plugin/EventHandler/PropertyVisibilityProviderInterface.phpg8&%dgû/¤src/Psalm/Plugin/Shepherd.phpé%8&%dé%_N-Z¤#src/Psalm/Plugin/ArgTypeInferer.phps8&%ds¬ƒ;-¤$src/Psalm/Plugin/PluginInterface.php>8&%d>ÐƒÌ ¤,src/Psalm/Plugin/FileExtensionsInterface.php68&%d6Œöj¤src/Psalm/Context.php´f8&%d´fŠr}7¤src/Psalm/Codebase.php8&%döƤ%src/Psalm/Storage/PropertyStorage.php. 8&%d. „_ëÒ¤*src/Psalm/Storage/ClassConstantStorage.php± 8&%d± øÍ¤)src/Psalm/Storage/FunctionLikeStorage.php8&%d™îÓɤ&src/Psalm/Storage/ClassLikeStorage.php$'8&%d$'r°Nä¤"src/Psalm/Storage/AttributeArg.php[8&%d[3hÜó¤#src/Psalm/Storage/Possibilities.phpo8&%dosûù¤¤%src/Psalm/Storage/FunctionStorage.php08&%d0|¼#Ĥ&src/Psalm/Storage/AttributeStorage.php‰8&%d‰JÌê¤%src/Psalm/Storage/EnumCaseStorage.phpÝ8&%dÝÕ1ÆB¤+src/Psalm/Storage/FunctionLikeParameter.phpÙ8&%dÙº¾e¤/src/Psalm/Storage/Assertion/HasAtLeastCount.phpü8&%dü½ìޤ-src/Psalm/Storage/Assertion/HasExactCount.phpE8&%dE2©¤4src/Psalm/Storage/Assertion/ArrayKeyDoesNotExist.phpO8&%dOaD·W¤+src/Psalm/Storage/Assertion/IsIdentical.php8&%d“DÈš¤,src/Psalm/Storage/Assertion/IsClassEqual.phpñ8&%dñ©F!¤4src/Psalm/Storage/Assertion/HasStringArrayAccess.phpÿ8&%dÿ€!¢0¤7src/Psalm/Storage/Assertion/DoesNotHaveAtLeastCount.php?8&%d? æ¤)src/Psalm/Storage/Assertion/IsNotType.phpä8&%däFbì¤(src/Psalm/Storage/Assertion/IsAClass.phpW8&%dWnar¤9src/Psalm/Storage/Assertion/HasIntOrStringArrayAccess.php 8&%d ZE\›¤1src/Psalm/Storage/Assertion/NonEmptyCountable.phpf8&%df6$?¤'src/Psalm/Storage/Assertion/InArray.phpÄ8&%dĵï#¤,src/Psalm/Storage/Assertion/IsEqualIsset.phpû8&%dû=m&¤+src/Psalm/Storage/Assertion/HasArrayKey.php_8&%d_"fg¤'src/Psalm/Storage/Assertion/IsIsset.phpä8&%däMÜw¤0src/Psalm/Storage/Assertion/NestedAssertions.php=8&%d=@¤-src/Psalm/Storage/Assertion/IsGreaterThan.phpü8&%düÐ@ÅŽ¤#src/Psalm/Storage/Assertion/Any.php‰8&%d‰¢†qµ¤)src/Psalm/Storage/Assertion/HasMethod.phpº8&%dºF˜/7¤.src/Psalm/Storage/Assertion/IsNotIdentical.phpL8&%dLi™c¤*src/Psalm/Storage/Assertion/IsLessThan.php 8&%d hsǤ(src/Psalm/Storage/Assertion/NonEmpty.phpá8&%dá:Efx¤.src/Psalm/Storage/Assertion/ArrayKeyExists.php 8&%d nú¤/src/Psalm/Storage/Assertion/IsClassNotEqual.phpî8&%dîO=p/¤1src/Psalm/Storage/Assertion/IsNotLooselyEqual.phpU8&%dU¿l_¤5src/Psalm/Storage/Assertion/DoesNotHaveExactCount.php<8&%d<ÚZ¹Ï¤4src/Psalm/Storage/Assertion/NotNonEmptyCountable.phpy8&%dyêÿEÁ¤&src/Psalm/Storage/Assertion/IsType.php—8&%d—0Û-^¤+src/Psalm/Storage/Assertion/IsCountable.php8&%dPVí)¤%src/Psalm/Storage/Assertion/Falsy.php$8&%d$ÃéQ¤&src/Psalm/Storage/Assertion/Empty_.php.8&%d.uÿÆØ¤3src/Psalm/Storage/Assertion/NotNestedAssertions.phpˆ8&%dˆJ7h¤3src/Psalm/Storage/Assertion/IsLessThanOrEqualTo.phpB8&%dBO¢™ý¤+src/Psalm/Storage/Assertion/IsNotAClass.phpž8&%džÏÄô¤.src/Psalm/Storage/Assertion/IsLooselyEqual.php 8&%d MGw¤1src/Psalm/Storage/Assertion/DoesNotHaveMethod.phpý8&%dý­åùe¤*src/Psalm/Storage/Assertion/NotInArray.php$8&%d$ÍR/³¤.src/Psalm/Storage/Assertion/IsNotCountable.phpÃ8&%dÃS‰Rl¤6src/Psalm/Storage/Assertion/IsGreaterThanOrEqualTo.phpK8&%dKßrà¤*src/Psalm/Storage/Assertion/IsNotIsset.php/8&%d/#F¤&src/Psalm/Storage/Assertion/Truthy.phpÚ8&%dÚevˆ3¤0src/Psalm/Storage/ImmutableNonCloneableTrait.php8&%dØ®…¤src/Psalm/Storage/Assertion.phpÇ8&%dǹUùG¤,src/Psalm/Storage/HasAttributesInterface.php‚8&%d‚± ‹¤)src/Psalm/Storage/CustomMetadataTrait.phpü8&%dü}Ñ•±¤!src/Psalm/Storage/FileStorage.phpj8&%djÞ«8&%d>"ÕÞ@¤'src/Psalm/Type/Atomic/TLiteralFloat.phpÚ8&%dÚIøû¤(src/Psalm/Type/Atomic/TLiteralString.phpB 8&%dB µ™>i¤(src/Psalm/Type/Atomic/TNonEmptyArray.php8&%d½°Çd¤)src/Psalm/Type/Atomic/TCallableObject.php:8&%d:P×cÿ¤ src/Psalm/Type/Atomic/TMixed.phpF8&%dF-Kø¤2src/Psalm/Type/Atomic/TNonEmptyLowercaseString.phpm8&%dm(VMa¤'src/Psalm/Type/Atomic/TSingleLetter.php°8&%d°k™,ï¤'src/Psalm/Type/Atomic/TCallableList.php8&%dÔËá÷¤.src/Psalm/Type/Atomic/HasIntersectionTrait.phpÜ8&%dÜö}9¡¤src/Psalm/Type/Atomic/TVoid.phpê8&%dêXx­ÿ¤'src/Psalm/Type/Atomic/TEmptyNumeric.phpq8&%dqOÌ™6¤"src/Psalm/Type/Atomic/TClosure.php’ 8&%d’ ßÎʤ)src/Psalm/Type/Atomic/TClassStringMap.php 8&%d /•ä¤#src/Psalm/Type/Atomic/TEnumCase.php 8&%d m,þ´¤-src/Psalm/Type/Atomic/TCallableKeyedArray.php.8&%d.rQ“B¤$src/Psalm/Type/Atomic/TTypeAlias.php8&%d ÿ9o¤ src/Psalm/Type/Atomic/TFloat.phpC8&%dC´j6ò¤#src/Psalm/Type/Atomic/TIterable.php¨8&%d¨{`£€¤'src/Psalm/Type/Atomic/TNonEmptyList.phpm8&%dmü‰¿¤(src/Psalm/Type/Atomic/TTemplateKeyOf.php½8&%d½ÛÈ)Ÿ¤'src/Psalm/Type/Atomic/CallableTrait.phpJ#8&%dJ#æ´¤-src/Psalm/Type/Atomic/TTemplateParamClass.phpà8&%dàLÆø|¤ src/Psalm/Type/Atomic/TFalse.phpª8&%dªm ¤)src/Psalm/Type/Atomic/TCallableString.php©8&%d©ÌЍ¤(src/Psalm/Type/Atomic/TNumericString.phpô8&%dô;mî¤src/Psalm/Type/Atomic/TTrue.php¥8&%d¥݆à¤(src/Psalm/Type/Atomic/TNonEmptyMixed.phpŒ8&%dŒ“…¼¤/src/Psalm/Type/Atomic/TTemplatePropertiesOf.phpò 8&%dò 4o„˜¤#src/Psalm/Type/Atomic/TArrayKey.phpÕ8&%dÕ"Ÿ¤)src/Psalm/Type/Atomic/TNonEmptyScalar.php88&%d8geޤ)src/Psalm/Type/Atomic/TNonEmptyString.php‚8&%d‚±œ6®¤1src/Psalm/Type/Atomic/TAnonymousClassInstance.php±8&%d±1›ðZ¤%src/Psalm/Type/Atomic/TEmptyMixed.php‚8&%d‚F†Øv¤"src/Psalm/Type/Atomic/TIntMask.phpà8&%dàOzYT¤&src/Psalm/Type/Atomic/TClassString.phpÎ8&%dÎ̭˺¤&src/Psalm/Type/Atomic/TEmptyScalar.php-8&%d-aò-̤0src/Psalm/Type/Atomic/TTemplateIndexedAccess.php¼8&%d¼*Á¤ src/Psalm/Type/Atomic/Scalar.phpõ8&%dõ¹Jч¤&src/Psalm/Type/Atomic/TNamedObject.php×8&%d×Y-U~¤"src/Psalm/Type/Atomic/TNumeric.php¡8&%d¡ý¸Ç¤src/Psalm/Type/Atomic/TList.php28&%d2®Çߤ(src/Psalm/Type/Atomic/TClassConstant.phpy8&%dy’qˆÝ¤src/Psalm/Type/Atomic/TBool.php>8&%d>ˆ$ïó¤3src/Psalm/Type/Atomic/TNonspecificLiteralString.php8&%des,¤#src/Psalm/Type/Atomic/TResource.php8&%daî¨f¤(src/Psalm/Type/Atomic/TGenericObject.php8&%dˆ(Z¤#src/Psalm/Type/Atomic/TIntRange.phpß8&%dß®Ü`ž¤src/Psalm/Type/UnionTrait.phpב8&%dבBÅ ”¤%src/Psalm/Type/MutableTypeVisitor.phpô8&%dôª‰O¤!src/Psalm/Type/TaintKindGroup.php†8&%d†ÇÓ¤src/Psalm/Type/Union.phpj$8&%dj$p”Jð¤src/Psalm/Type/MutableUnion.phpœ88&%dœ8Ž4úá¤$src/Psalm/FileBasedPluginAdapter.phpú8&%dú—x[¤src/Psalm/Config.phpÞB8&%dÞB Ä™9¤&src/Psalm/PluginRegistrationSocket.php 8&%d `ÈóN¤src/Psalm/ErrorBaseline.php¸$8&%d¸$ïˆ<¤!dictionaries/CallMap_80_delta.php(j8&%d(j_¹Z¯¤!dictionaries/CallMap_83_delta.php¿8&%d¿Â㉄¤"dictionaries/ManualPropertyMap.phpº8&%dº…[Û¤!dictionaries/CallMap_71_delta.php8&%dV]¨¤%dictionaries/InternalTaintSinkMap.phpY8&%dY•¿a¤<dictionaries/scripts/update_signaturemap_from_other_tool.php{8&%d{•õ.¤!dictionaries/CallMap_72_delta.php~L8&%d~LeSJ¤!dictionaries/CallMap_73_delta.phpê8&%dêCÛ€2¤dictionaries/PropertyMap.phpwE8&%dwE$Þ_æ¤!dictionaries/CallMap_82_delta.php¿ 8&%d¿ [û¤!dictionaries/CallMap_74_delta.php8&%dÛÕÜò¤!dictionaries/CallMap_81_delta.phpl8&%dl•Kï¤#dictionaries/CallMap_historical.phpt°8&%dt°~Îå’¤dictionaries/CallMap.phpS 8&%dS 4VºÆ¤assets/psalm-phar/dot-gitignore8&%dP sT¤assets/psalm-phar/README.mdn8&%dn+¿E¤assets/psalm-phar/composer.jsonû8&%dû†Ëû+¤.box/bin/check-requirements.phpë8&%dë^ʨ¤.box/src/IsFulfilled.phpv8&%dvº%*H¤!.box/src/IsExtensionFulfilled.phpv8&%dv'0§Ò¤".box/src/IsPhpVersionFulfilled.phpú8&%dúî!83¤.box/src/IO.php 8&%d ™[l%¤.box/src/Checker.phpÄ8&%dć)W>¤".box/src/RequirementCollection.phpÂ8&%dÂWbÈ?¤.box/src/Requirement.phpm8&%dmÀ€B¤.box/src/Printer.phpÉ 8&%dÉ )8AV¤.box/src/Terminal.php¸ 8&%d¸ %V‰â¤(.box/vendor/composer/autoload_static.phpK8&%dK ¥¡?¤.box/vendor/composer/LICENSE.8&%d. Õ¤*.box/vendor/composer/autoload_classmap.php, 8&%d, ¹Ó½Ç¤$.box/vendor/composer/ClassLoader.phpÄ>8&%dÄ>Æ5Ky¤&.box/vendor/composer/autoload_psr4.php68&%d60Ó¤B.box/vendor/composer/semver/src/Constraint/ConstraintInterface.php‰8&%d‰޽wQ¤9.box/vendor/composer/semver/src/Constraint/Constraint.php'&8&%d'&ÜØ`â¤>.box/vendor/composer/semver/src/Constraint/MultiConstraint.php~8&%d~5[çe¤1.box/vendor/composer/semver/src/VersionParser.phpÄ98&%dÄ9ÑWz ¤*.box/vendor/composer/semver/src/Semver.php„8&%d„¹×¯®¤..box/vendor/composer/semver/src/Comparator.phpu8&%du 74¤&.box/vendor/composer/autoload_real.php8&%dÁyi\¤,.box/vendor/composer/autoload_namespaces.php•8&%d•tÛ!פ.box/vendor/autoload.php²8&%d²s¯¤ ¤.box/.requirements.phpd8&%dd“þéö¤4vendor/felixfbecker/language-server-protocol/LICENSEò8&%dò>¢¡9¤dvendor/felixfbecker/language-server-protocol/src/WorkspaceSymbolClientCapabilitiesResolveSupport.phpü8&%düš¸|«¤jvendor/felixfbecker/language-server-protocol/src/ShowMessageRequestClientCapabilitiesMessageActionItem.php 8&%d ?hwŤTvendor/felixfbecker/language-server-protocol/src/DocumentOnTypeFormattingOptions.php8&%dô¹5¤Tvendor/felixfbecker/language-server-protocol/src/VersionedTextDocumentIdentifier.php8&%dŒ6iZ¤mvendor/felixfbecker/language-server-protocol/src/CompletionClientCapabilitiesCompletionItemResolveSupport.phpå8&%dåÒ³¤Jvendor/felixfbecker/language-server-protocol/src/CompletionTriggerKind.php68&%d6öØŠ¤|vendor/felixfbecker/language-server-protocol/src/SignatureHelpClientCapabilitiesSignatureInformationParameterInformation.php!8&%d!:O¯ž¤Mvendor/felixfbecker/language-server-protocol/src/RenameClientCapabilities.php8&%d~þ¤Nvendor/felixfbecker/language-server-protocol/src/MonikerClientCapabilities.phpA8&%dAi|÷¤Bvendor/felixfbecker/language-server-protocol/src/SignatureHelp.php$8&%d$9t)ǤGvendor/felixfbecker/language-server-protocol/src/CodeActionDisabled.phpˆ8&%dˆXRRu¤^vendor/felixfbecker/language-server-protocol/src/ClientCapabilitiesWorkspaceFileOperations.phpn8&%dnu– ñ¤Tvendor/felixfbecker/language-server-protocol/src/DocumentColorClientCapabilities.phpŽ8&%dŽüž§á¤Cvendor/felixfbecker/language-server-protocol/src/CompletionList.phpÚ8&%dÚ¨0䞤Bvendor/felixfbecker/language-server-protocol/src/MarkupContent.phpê8&%dêØ2K‘¤ivendor/felixfbecker/language-server-protocol/src/CodeActionClientCapabilitiesCodeActionLiteralSupport.php8&%dßäm6¤Nvendor/felixfbecker/language-server-protocol/src/ClientCapabilitiesGeneral.phpÜ8&%dÜÿ ,U¤=vendor/felixfbecker/language-server-protocol/src/Position.phpŸ8&%dŸK¦,™¤cvendor/felixfbecker/language-server-protocol/src/PublishDiagnosticsClientCapabilitiesTagSupport.phpÛ8&%dÛ8S) ¤Cvendor/felixfbecker/language-server-protocol/src/InsertTextMode.php¼8&%d¼?v¦§¤Vvendor/felixfbecker/language-server-protocol/src/WorkspaceSymbolClientCapabilities.php÷8&%d÷5ta¤wvendor/felixfbecker/language-server-protocol/src/CodeActionClientCapabilitiesCodeActionLiteralSupportcodeActionKind.phpŠ8&%dбëHç¤Ovendor/felixfbecker/language-server-protocol/src/MarkdownClientCapabilities.php†8&%d†Œ¹!¤Jvendor/felixfbecker/language-server-protocol/src/ResourceOperationKind.phpé8&%désÐÌš¤=vendor/felixfbecker/language-server-protocol/src/TextEdit.phpz8&%dzÀ$‰{¤Evendor/felixfbecker/language-server-protocol/src/ReferenceContext.php£8&%d£ #0¤`vendor/felixfbecker/language-server-protocol/src/WorkspaceSymbolClientCapabilitiesSymbolKind.php8&%dן!ɤ@vendor/felixfbecker/language-server-protocol/src/TokenFormat.php8&%dB^Æå¤Ivendor/felixfbecker/language-server-protocol/src/ReferenceInformation.php`8&%d`ù#Áõ¤<vendor/felixfbecker/language-server-protocol/src/Command.php¼8&%d¼ös¤Cvendor/felixfbecker/language-server-protocol/src/CodeActionKind.phpú8&%dú›FÛ¶¤_vendor/felixfbecker/language-server-protocol/src/CompletionClientCapabilitiesCompletionItem.phpº8&%dº*Û™¤?vendor/felixfbecker/language-server-protocol/src/MarkupKind.php$8&%d$lò¶¤]vendor/felixfbecker/language-server-protocol/src/DidChangeConfigurationClientCapabilities.php—8&%d—5ÝæÞ¤^vendor/felixfbecker/language-server-protocol/src/DocumentRangeFormattingClientCapabilities.php˜8&%d˜×·áe¤_vendor/felixfbecker/language-server-protocol/src/CompletionClientCapabilitiesCompletionList.php’8&%d’Œyତ=vendor/felixfbecker/language-server-protocol/src/Location.php)8&%d)Öú%w¤Tvendor/felixfbecker/language-server-protocol/src/CallHierarchyClientCapabilities.phpH8&%dH±¸>¤Yvendor/felixfbecker/language-server-protocol/src/PublishDiagnosticsClientCapabilities.phpª8&%dª>Ð¥¤Bvendor/felixfbecker/language-server-protocol/src/DiagnosticTag.php@8&%d@iä¤Evendor/felixfbecker/language-server-protocol/src/InitializeResult.php›8&%d›^¹›«¤]vendor/felixfbecker/language-server-protocol/src/SemanticTokensClientCapabilitiesRequests.php‰8&%d‰Ù¡-¤Ovendor/felixfbecker/language-server-protocol/src/CompletionItemLabelDetails.php~8&%d~RŒŽ‰¤Svendor/felixfbecker/language-server-protocol/src/TextDocumentContentChangeEvent.phpr8&%drÕðÀ(¤ivendor/felixfbecker/language-server-protocol/src/CompletionClientCapabilitiesCompletionItemTagSupport.phpÙ8&%dÙ¤7¤¤_vendor/felixfbecker/language-server-protocol/src/DocumentSymbolClientCapabilitiesSymbolKind.phpÉ8&%dɼûî ¤Pvendor/felixfbecker/language-server-protocol/src/ReferenceClientCapabilities.phpw8&%dw”YÛ¬¤Uvendor/felixfbecker/language-server-protocol/src/DocumentSymbolClientCapabilities.phpÍ8&%d̓=¤Xvendor/felixfbecker/language-server-protocol/src/DocumentHighlightClientCapabilities.php8&%d÷êð%¤Lvendor/felixfbecker/language-server-protocol/src/TextDocumentSyncOptions.phpœ8&%dœNi¹ ¤Avendor/felixfbecker/language-server-protocol/src/MarkedString.phpì8&%dìóuÌW¤Fvendor/felixfbecker/language-server-protocol/src/CompletionOptions.phpÊ8&%dʨ˜r¤Dvendor/felixfbecker/language-server-protocol/src/CodeDescription.php‹8&%d‹þh¤Ivendor/felixfbecker/language-server-protocol/src/SignatureHelpOptions.php×8&%d×øÎî¤Gvendor/felixfbecker/language-server-protocol/src/ServerCapabilities.php× 8&%d× ðeC)¤tvendor/felixfbecker/language-server-protocol/src/CompletionClientCapabilitiesCompletionItemInsertTextModeSupport.phpÜ8&%dÜÊpàǤWvendor/felixfbecker/language-server-protocol/src/TextDocumentSyncClientCapabilities.phpJ8&%dJÐæOu¤=vendor/felixfbecker/language-server-protocol/src/CodeLens.php„8&%d„·ê€>¤Ovendor/felixfbecker/language-server-protocol/src/InitializeResultServerInfo.phpæ8&%dæV¦r¾¤Yvendor/felixfbecker/language-server-protocol/src/LinkedEditingRangeClientCapabilities.phpL8&%dL=¶xë¤?vendor/felixfbecker/language-server-protocol/src/Diagnostic.phpú 8&%dú Æ­¤Yvendor/felixfbecker/language-server-protocol/src/ShowMessageRequestClientCapabilities.phpß8&%dß?^B¤Yvendor/felixfbecker/language-server-protocol/src/RegularExpressionsClientCapabilities.php[8&%d[ˆ>4‘¤Ivendor/felixfbecker/language-server-protocol/src/TextDocumentSyncKind.php>8&%d>|ØÍ™¤Qvendor/felixfbecker/language-server-protocol/src/DiagnosticRelatedInformation.php×8&%d×>乤Svendor/felixfbecker/language-server-protocol/src/TextDocumentClientCapabilities.php+8&%d+@£­¤Svendor/felixfbecker/language-server-protocol/src/ShowDocumentClientCapabilities.phpV8&%dV£:T¤Gvendor/felixfbecker/language-server-protocol/src/ContentChangeEvent.phpf8&%df¥™µþ¤Dvendor/felixfbecker/language-server-protocol/src/WorkspaceFolder.phpˆ8&%dˆ]™>T¤Svendor/felixfbecker/language-server-protocol/src/DocumentLinkClientCapabilities.php8&%dÜ&D›¤Tvendor/felixfbecker/language-server-protocol/src/SignatureHelpClientCapabilities.phpŒ8&%dŒ¤}¤@vendor/felixfbecker/language-server-protocol/src/SaveOptions.php'8&%d'÷w«ù¤?vendor/felixfbecker/language-server-protocol/src/ClientInfo.php 8&%d ZÇÑq¤Ivendor/felixfbecker/language-server-protocol/src/ParameterInformation.php°8&%d°+uÚ¤Uvendor/felixfbecker/language-server-protocol/src/TypeDefinitionClientCapabilities.php8&%d @1¤Cvendor/felixfbecker/language-server-protocol/src/CompletionItem.php¼8&%d¼#ï_¤Xvendor/felixfbecker/language-server-protocol/src/CodeLensWorkspaceClientCapabilities.phpÄ8&%dÄjï¤Gvendor/felixfbecker/language-server-protocol/src/ClientCapabilities.phpæ8&%dæ–:’¤?vendor/felixfbecker/language-server-protocol/src/SymbolKind.php8&%dãrí:¤Jvendor/felixfbecker/language-server-protocol/src/DocumentHighlightKind.php8&%d;€z8¤Hvendor/felixfbecker/language-server-protocol/src/DependencyReference.phpà8&%dàÚ5æ¤=vendor/felixfbecker/language-server-protocol/src/LogTrace.phpô8&%dôh˜½:¤Fvendor/felixfbecker/language-server-protocol/src/CompletionItemTag.phpÔ8&%dÔhŸjÞ¤Cvendor/felixfbecker/language-server-protocol/src/FileChangeType.phpT8&%dTþøÇ)¤Evendor/felixfbecker/language-server-protocol/src/TextDocumentItem.phpª8&%dªüߎ¤Uvendor/felixfbecker/language-server-protocol/src/SemanticTokensClientCapabilities.php8&%dš¶õ¤Lvendor/felixfbecker/language-server-protocol/src/HoverClientCapabilities.phpE8&%dE ñ°î¤Uvendor/felixfbecker/language-server-protocol/src/SelectionRangeClientCapabilities.phpJ8&%dJ,ä:vendor/felixfbecker/language-server-protocol/src/Hover.phpÚ8&%dڪ﫛¤Svendor/felixfbecker/language-server-protocol/src/FoldingRangeClientCapabilities.php8&%dŸ «¤Fvendor/felixfbecker/language-server-protocol/src/CompletionContext.php$8&%d$Ð~¨Û¤Uvendor/felixfbecker/language-server-protocol/src/ImplementationClientCapabilities.php8&%dàÖ_¤Fvendor/felixfbecker/language-server-protocol/src/MessageActionItem.phpq8&%dq#ÖïY¤Rvendor/felixfbecker/language-server-protocol/src/DeclarationClientCapabilities.phpø8&%døïö½¤>vendor/felixfbecker/language-server-protocol/src/SymbolTag.php-8&%d-ò‚kî¤Mvendor/felixfbecker/language-server-protocol/src/ClientCapabilitiesWindow.phpE8&%dE´ïs•¤Qvendor/felixfbecker/language-server-protocol/src/CompletionClientCapabilities.phpl8&%dl¬•¤^vendor/felixfbecker/language-server-protocol/src/SemanticTokensWorkspaceClientCapabilities.phpÎ8&%dηÀr¤Fvendor/felixfbecker/language-server-protocol/src/FormattingOptions.phpÄ8&%dÄЧ3J¤@vendor/felixfbecker/language-server-protocol/src/MessageType.phpk8&%dkÈ+iO¤Kvendor/felixfbecker/language-server-protocol/src/TextDocumentIdentifier.phpž8&%džÇ‘?¤Pvendor/felixfbecker/language-server-protocol/src/ClientCapabilitiesWorkspace.phpi8&%dikh¾Î¤Fvendor/felixfbecker/language-server-protocol/src/DocumentHighlight.phpÜ8&%dÜt{M¤Evendor/felixfbecker/language-server-protocol/src/InsertTextFormat.phpÉ8&%dÉHž¤Fvendor/felixfbecker/language-server-protocol/src/SymbolInformation.php³8&%d³õv—¤Evendor/felixfbecker/language-server-protocol/src/ChangeAnnotation.php«8&%d«sì f¤Ovendor/felixfbecker/language-server-protocol/src/CodeLensClientCapabilities.php‰8&%d‰ 1ä’¤kvendor/felixfbecker/language-server-protocol/src/WorkspaceEditClientCapabilitiesChangeAnnotationSupport.phpé8&%déKóE¤Evendor/felixfbecker/language-server-protocol/src/SymbolDescriptor.phpÜ8&%dÜÅk£Ù¤Nvendor/felixfbecker/language-server-protocol/src/SymbolLocationInformation.phpz8&%dzV"'¤Rvendor/felixfbecker/language-server-protocol/src/PrepareSupportDefaultBehavior.php 8&%d @o϶¤_vendor/felixfbecker/language-server-protocol/src/CodeActionClientCapabilitiesResolveSupport.php8&%dQ¡3z¤Gvendor/felixfbecker/language-server-protocol/src/DiagnosticSeverity.phpk8&%dk­X¤\vendor/felixfbecker/language-server-protocol/src/DidChangeWatchedFilesClientCapabilities.php8&%dMÆM¤_vendor/felixfbecker/language-server-protocol/src/DocumentOnTypeFormattingClientCapabilities.php™8&%d™`Jš¬¤Dvendor/felixfbecker/language-server-protocol/src/CodeLensOptions.phpq8&%dqb‚¡¤Hvendor/felixfbecker/language-server-protocol/src/FailureHandlingKind.php=8&%d=V€Q~¤Gvendor/felixfbecker/language-server-protocol/src/CompletionItemKind.php·8&%d·-èÌŸ¤`vendor/felixfbecker/language-server-protocol/src/WorkspaceSymbolClientCapabilitiesTagSupport.php8&%dÔ\ c¤Jvendor/felixfbecker/language-server-protocol/src/CodeActionTriggerKind.php÷8&%d÷Š?¤Ivendor/felixfbecker/language-server-protocol/src/SignatureInformation.phpñ8&%dñ÷c(¤_vendor/felixfbecker/language-server-protocol/src/DocumentSymbolClientCapabilitiesTagSupport.phpK8&%dK·:°¤hvendor/felixfbecker/language-server-protocol/src/SignatureHelpClientCapabilitiesSignatureInformation.php¶8&%d¶2-Q¤Fvendor/felixfbecker/language-server-protocol/src/PackageDescriptor.phpÚ8&%dÚ,c[*¤Qvendor/felixfbecker/language-server-protocol/src/CodeActionClientCapabilities.phpÆ 8&%dÆ nYðæ¤>vendor/felixfbecker/language-server-protocol/src/FileEvent.phpä8&%dä\µ- ¤>vendor/felixfbecker/language-server-protocol/src/ErrorCode.phpi8&%di{ëk¤:vendor/felixfbecker/language-server-protocol/src/Range.php¡8&%d¡Ðª…¤Tvendor/felixfbecker/language-server-protocol/src/WorkspaceEditClientCapabilities.phpû8&%dûþ7J¤Uvendor/felixfbecker/language-server-protocol/src/ExecuteCommandClientCapabilities.phpy8&%dyÀ­Ù¤Yvendor/felixfbecker/language-server-protocol/src/DocumentFormattingClientCapabilities.php“8&%d“$~zŤ?vendor/felixfbecker/language-server-protocol/src/CodeAction.php8&%d‰u“‡¤Bvendor/felixfbecker/language-server-protocol/src/WorkspaceEdit.php> 8&%d> gı‡¤Qvendor/felixfbecker/language-server-protocol/src/DefinitionClientCapabilities.phpo8&%do-“Ó»¤Fvendor/felixfbecker/language-server-protocol/src/CodeActionContext.php,8&%d,D³V`¤Jvendor/felixfbecker/language-server-protocol/src/ExecuteCommandOptions.phpg8&%dgã ¦;¤?vendor/felixfbecker/language-server-protocol/src/LogMessage.php68&%d6°VÕe¤>vendor/felixfbecker/language-server-protocol/package-lock.jsonN8&%dNj¨\¤9vendor/felixfbecker/language-server-protocol/package.jsonN8&%dN2W>õ¤-vendor/felixfbecker/advanced-json-rpc/LICENSEò8&%dò>¢¡9¤5vendor/felixfbecker/advanced-json-rpc/lib/Message.php8&%dJ&+¤:vendor/felixfbecker/advanced-json-rpc/lib/Notification.phpñ8&%dñ$¥·¤=vendor/felixfbecker/advanced-json-rpc/lib/SuccessResponse.phph8&%dhð­Û·¤5vendor/felixfbecker/advanced-json-rpc/lib/Request.php„8&%d„˜s4¤6vendor/felixfbecker/advanced-json-rpc/lib/Response.php‘8&%d‘°9yd¤8vendor/felixfbecker/advanced-json-rpc/lib/Dispatcher.php—8&%d—'°_¬¤7vendor/felixfbecker/advanced-json-rpc/lib/ErrorCode.php 8&%d \îÈî¤;vendor/felixfbecker/advanced-json-rpc/lib/ErrorResponse.phpr8&%drd¥}¦¤3vendor/felixfbecker/advanced-json-rpc/lib/Error.php¿8&%d¿ž;ʵ¤vendor/psr/container/LICENSEy8&%dyÊO“p¤/vendor/psr/container/src/ContainerInterface.php&8&%d&-ثŤ8vendor/psr/container/src/ContainerExceptionInterface.phpÎ8&%dÎþf¿û¤7vendor/psr/container/src/NotFoundExceptionInterface.phpµ8&%dµÓ€†‘¤vendor/psr/log/LICENSE=8&%d=p±ŽO¤/vendor/psr/log/Psr/Log/LoggerAwareInterface.php@8&%d@¶Á+C¤#vendor/psr/log/Psr/Log/LogLevel.phpP8&%dPGˆfä¤+vendor/psr/log/Psr/Log/LoggerAwareTrait.php¨8&%d¨|aBѤ%vendor/psr/log/Psr/Log/NullLogger.phpÚ8&%dÚˆZ¿¤&vendor/psr/log/Psr/Log/LoggerTrait.phpf 8&%df 혲b¤3vendor/psr/log/Psr/Log/InvalidArgumentException.phpw8&%dwšŒb¤*vendor/psr/log/Psr/Log/LoggerInterface.php9 8&%d9 ¹Â´Ü¤)vendor/psr/log/Psr/Log/AbstractLogger.php0 8&%d0 x!öf¤vendor/sebastian/diff/LICENSE 8&%d a¸©1¤Mvendor/sebastian/diff/src/TimeEfficientLongestCommonSubsequenceCalculator.php8&%den¡W¤=vendor/sebastian/diff/src/Output/UnifiedDiffOutputBuilder.php\8&%d\HرE¤?vendor/sebastian/diff/src/Output/AbstractChunkOutputBuilder.php8&%d(ô\Õ¤?vendor/sebastian/diff/src/Output/DiffOutputBuilderInterface.php#8&%d#¨©Å–¤Cvendor/sebastian/diff/src/Output/StrictUnifiedDiffOutputBuilder.php·(8&%d·(†R¤:vendor/sebastian/diff/src/Output/DiffOnlyOutputBuilder.php˜8&%d˜ ÑÁþ¤Ovendor/sebastian/diff/src/MemoryEfficientLongestCommonSubsequenceCalculator.php®8&%d®Ðㄤ"vendor/sebastian/diff/src/Line.php[8&%d[ya¶®¤@vendor/sebastian/diff/src/Exception/InvalidArgumentException.phpš8&%dšZ%¤1vendor/sebastian/diff/src/Exception/Exception.phpy8&%dy?{¤>vendor/sebastian/diff/src/Exception/ConfigurationException.phpL8&%dLóZ¡Ž¤"vendor/sebastian/diff/src/Diff.phpy8&%dy{2_¤@vendor/sebastian/diff/src/LongestCommonSubsequenceCalculator.php8&%d×LSª¤$vendor/sebastian/diff/src/Parser.php© 8&%d© â0⦤$vendor/sebastian/diff/src/Differ.php:$8&%d:$,./ʤ#vendor/sebastian/diff/src/Chunk.phpn8&%dn“è̤$vendor/doctrine/deprecations/LICENSE)8&%d)"¿ê0¤Fvendor/doctrine/deprecations/lib/Doctrine/Deprecations/Deprecation.php-8&%d-ø¡›¤Uvendor/doctrine/deprecations/lib/Doctrine/Deprecations/PHPUnit/VerifyDeprecations.php 8&%d ©pv¤-vendor/symfony/polyfill-intl-grapheme/LICENSE)8&%d)“\ª¤3vendor/symfony/polyfill-intl-grapheme/bootstrap.php¾ 8&%d¾ >€…E¤5vendor/symfony/polyfill-intl-grapheme/bootstrap80.phpI 8&%dI ½T ¤2vendor/symfony/polyfill-intl-grapheme/Grapheme.php&8&%d&´ïꓤ-vendor/symfony/string/Resources/functions.phpt8&%dtf2Ô¨¤<vendor/symfony/string/Resources/data/wcswidth_table_wide.phpï8&%dïËŽëA¤<vendor/symfony/string/Resources/data/wcswidth_table_zero.phpœ8&%dœ†¶ž¤vendor/symfony/string/LICENSE,8&%d,Õ¦_Ϥ6vendor/symfony/string/Exception/ExceptionInterface.phpg8&%dg ½þµ¤<vendor/symfony/string/Exception/InvalidArgumentException.php–8&%d–¸X^ø¤4vendor/symfony/string/Exception/RuntimeException.php†8&%d†lû¤'vendor/symfony/string/UnicodeString.php×28&%d×2¯‚Óf¤.vendor/symfony/string/Slugger/AsciiSlugger.phpA8&%dAÒÝ1ͤ2vendor/symfony/string/Slugger/SluggerInterface.phpø8&%døcä8ï¤$vendor/symfony/string/ByteString.phpð<8&%dð< £’ƒ¤/vendor/symfony/string/AbstractUnicodeString.phpri8&%drißaƒ¤)vendor/symfony/string/CodePointString.php¹8&%d¹V㋤$vendor/symfony/string/LazyString.php|8&%d|‚So¤3vendor/symfony/string/Inflector/FrenchInflector.php@8&%d@ÉõW¤6vendor/symfony/string/Inflector/InflectorInterface.phpZ8&%dZü£ò•¤4vendor/symfony/string/Inflector/EnglishInflector.php&=8&%d&=ÍÛH¤(vendor/symfony/string/AbstractString.php2O8&%d2O}¾n_¤?vendor/symfony/polyfill-php73/Resources/stubs/JsonException.phph8&%dh–k˜m¤%vendor/symfony/polyfill-php73/LICENSE)8&%d)´`e0¤+vendor/symfony/polyfill-php73/bootstrap.phpŽ8&%dŽOÂ~Ù¤'vendor/symfony/polyfill-php73/Php73.phpŠ8&%dŠ ®Ã¤(vendor/symfony/service-contracts/LICENSE)8&%d)5å¤8vendor/symfony/service-contracts/ServiceLocatorTrait.php8&%düƒB;¤3vendor/symfony/service-contracts/ResetInterface.phpý8&%dýìj­¤7vendor/symfony/service-contracts/Attribute/Required.php§8&%d§½¾#õ¤@vendor/symfony/service-contracts/Attribute/SubscribedService.phpB8&%dBrAè¤;vendor/symfony/service-contracts/ServiceSubscriberTrait.phpÙ8&%dÙ—,ù³¤=vendor/symfony/service-contracts/ServiceProviderInterface.phpç8&%dçË1¤?vendor/symfony/service-contracts/ServiceSubscriberInterface.phpß8&%d߬^)¤%vendor/symfony/polyfill-ctype/LICENSE)8&%d)´`e0¤+vendor/symfony/polyfill-ctype/bootstrap.php48&%d4Ñ×Ùá¤-vendor/symfony/polyfill-ctype/bootstrap80.phpp8&%dpt óÒ¤'vendor/symfony/polyfill-ctype/Ctype.phpÍ8&%dÍ5;ˤ,vendor/symfony/deprecation-contracts/LICENSE)8&%d)î‰2¤1vendor/symfony/deprecation-contracts/function.php48&%d4`1!ѤFvendor/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php·8&%d·âñ®¤Xvendor/symfony/polyfill-intl-normalizer/Resources/unidata/compatibilityDecomposition.php¸è8&%d¸è?5¤Tvendor/symfony/polyfill-intl-normalizer/Resources/unidata/canonicalDecomposition.php€ˆ8&%d€ˆAL»¤Rvendor/symfony/polyfill-intl-normalizer/Resources/unidata/canonicalComposition.php¨=8&%d¨=LÕ¾¸¤Lvendor/symfony/polyfill-intl-normalizer/Resources/unidata/combiningClass.php“.8&%d“.ÃϤ/vendor/symfony/polyfill-intl-normalizer/LICENSE)8&%d)“\ª¤5vendor/symfony/polyfill-intl-normalizer/bootstrap.php08&%d0‰e¤7vendor/symfony/polyfill-intl-normalizer/bootstrap80.php+8&%d+Ý6vendor/symfony/polyfill-intl-normalizer/Normalizer.phpO$8&%dO$¾=aĤ!vendor/symfony/filesystem/LICENSE,8&%d,„©»U¤=vendor/symfony/filesystem/Exception/FileNotFoundException.phpß8&%dߩϤ:vendor/symfony/filesystem/Exception/ExceptionInterface.phpæ8&%dæÖÁe¤@vendor/symfony/filesystem/Exception/InvalidArgumentException.phpå8&%då™ Ò”¤<vendor/symfony/filesystem/Exception/IOExceptionInterface.php³8&%d³cæwû¤8vendor/symfony/filesystem/Exception/RuntimeException.phpÀ8&%dÀ‹!s¶¤3vendor/symfony/filesystem/Exception/IOException.phpÏ8&%dϹ‘¤ã¤"vendor/symfony/filesystem/Path.phpf8&%dfÏ«;Œ¤(vendor/symfony/filesystem/Filesystem.phprt8&%drtþÅȤEvendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.phpj8&%djÖ³Ív¤:vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.phpw8&%dw=7T8¤<vendor/symfony/polyfill-php80/Resources/stubs/Stringable.phpŒ8&%dŒt]\Ú¤;vendor/symfony/polyfill-php80/Resources/stubs/Attribute.phpð8&%dðMKÜ<¤<vendor/symfony/polyfill-php80/Resources/stubs/ValueError.phpa8&%da&ü9ߤ*vendor/symfony/polyfill-php80/PhpToken.php‰8&%d‰]fñ¤%vendor/symfony/polyfill-php80/LICENSE$8&%d$LO! ¤+vendor/symfony/polyfill-php80/bootstrap.php³8&%d³î\¡¤'vendor/symfony/polyfill-php80/Php80.phpù 8&%dù cH¼¸¤Fvendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php8&%d±S¤E¤@vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.phpU8&%dUvv7¤@vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.phpW[8&%dW[z,N]¤(vendor/symfony/polyfill-mbstring/LICENSE)8&%d)“\ª¤-vendor/symfony/polyfill-mbstring/Mbstring.phpÎp8&%dÎp¨ÌP¤.vendor/symfony/polyfill-mbstring/bootstrap.php 8&%d ¸yκ¤0vendor/symfony/polyfill-mbstring/bootstrap80.phpP%8&%dP%h׃ø¤9vendor/symfony/console/Descriptor/DescriptorInterface.phpY8&%dY'"†¤4vendor/symfony/console/Descriptor/JsonDescriptor.phpä8&%dä;ad»¤<vendor/symfony/console/Descriptor/ApplicationDescription.php48&%d4º‚±q¤0vendor/symfony/console/Descriptor/Descriptor.php: 8&%d: %I-¤3vendor/symfony/console/Descriptor/XmlDescriptor.phpE'8&%dE'.´û¤8vendor/symfony/console/Descriptor/MarkdownDescriptor.php‹8&%d‹ð·;½¤4vendor/symfony/console/Descriptor/TextDescriptor.php.28&%d.2nÑÂפ0vendor/symfony/console/Resources/completion.bashÉ 8&%dÉ  z(¤4vendor/symfony/console/Resources/bin/hiddeninput.exe$8&%d$•¥v¤8vendor/symfony/console/Output/ConsoleOutputInterface.php58&%d5w 혤/vendor/symfony/console/Output/ConsoleOutput.php/8&%d/öoFq¤6vendor/symfony/console/Output/ConsoleSectionOutput.php»8&%d»¥ïªã¤5vendor/symfony/console/Output/TrimmedBufferOutput.phpz8&%dz ±#Ƥ(vendor/symfony/console/Output/Output.phpr8&%drùtË”¤0vendor/symfony/console/Output/BufferedOutput.phpg8&%dgÞÌÜä,vendor/symfony/console/Output/NullOutput.phpD 8&%dD ¢²Ñ®¤.vendor/symfony/console/Output/StreamOutput.phpÅ 8&%dÅ ´â¬D¤1vendor/symfony/console/Output/OutputInterface.php| 8&%d| õ%Y¤3vendor/symfony/console/Helper/ProgressIndicator.phpé8&%déZO"Þ¤(vendor/symfony/console/Helper/Helper.phpö8&%dözËÑ3¤2vendor/symfony/console/Helper/DescriptorHelper.php 8&%d Åk ¤6vendor/symfony/console/Helper/DebugFormatterHelper.php` 8&%d` bÊï¤0vendor/symfony/console/Helper/TableSeparator.php)8&%d)¨æò¤+vendor/symfony/console/Helper/TableCell.php8&%díº0r¤1vendor/symfony/console/Helper/FormatterHelper.phpˆ 8&%dˆ ^d<>¤2vendor/symfony/console/Helper/InputAwareHelper.php-8&%d-Jò‹.¤,vendor/symfony/console/Helper/TableStyle.phpÛ08&%dÛ0ôÛ ”¤'vendor/symfony/console/Helper/Table.php‚r8&%d‚r”í¤1vendor/symfony/console/Helper/HelperInterface.phpa8&%daÞ%ÙǤ(vendor/symfony/console/Helper/Dumper.phpj8&%dj©–U¤+vendor/symfony/console/Helper/HelperSet.phpO 8&%dO /y™J¤+vendor/symfony/console/Helper/TableRows.phpZ8&%dZ*¤e¤-vendor/symfony/console/Helper/ProgressBar.php6H8&%d6H,ŸÈw¤7vendor/symfony/console/Helper/SymfonyQuestionHelper.phpc 8&%dc žà¨¤0vendor/symfony/console/Helper/TableCellStyle.phpl8&%dlèH±y¤0vendor/symfony/console/Helper/QuestionHelper.phpM8&%dMA:øÏ¤/vendor/symfony/console/Helper/ProcessHelper.phpà8&%dàž×Ý»¤vendor/symfony/console/LICENSE,8&%d,„©»U¤Bvendor/symfony/console/Formatter/OutputFormatterStyleInterface.phpk8&%dk¥RT¤=vendor/symfony/console/Formatter/OutputFormatterInterface.phpH8&%dHy§D¤4vendor/symfony/console/Formatter/OutputFormatter.phpŸ8&%dŸŠ X¤>vendor/symfony/console/Formatter/OutputFormatterStyleStack.php5 8&%d5 ëíĤFvendor/symfony/console/Formatter/WrappableOutputFormatterInterface.phpÃ8&%dÃ<¤8vendor/symfony/console/Formatter/NullOutputFormatter.phps8&%dsŒDO¤=vendor/symfony/console/Formatter/NullOutputFormatterStyle.phpº8&%dºÙJc˜¤9vendor/symfony/console/Formatter/OutputFormatterStyle.phpk 8&%dk n»×c¤/vendor/symfony/console/Logger/ConsoleLogger.phpÌ8&%dÌÈîãÒ¤!vendor/symfony/console/Cursor.phpG8&%dG´‚}¤:vendor/symfony/console/Exception/MissingInputException.php8&%dKô…ª¤7vendor/symfony/console/Exception/ExceptionInterface.php¿8&%d¿û"R¤=vendor/symfony/console/Exception/CommandNotFoundException.phpÒ8&%dÒ0˜•n¤3vendor/symfony/console/Exception/LogicException.phpÀ8&%dÀÝÍë¤?vendor/symfony/console/Exception/NamespaceNotFoundException.phpð8&%dð¥\; ¤;vendor/symfony/console/Exception/InvalidOptionException.php8&%dó1¤=vendor/symfony/console/Exception/InvalidArgumentException.phpÔ8&%dÔ©¯T¤5vendor/symfony/console/Exception/RuntimeException.phpÄ8&%dÄ,§by¤/vendor/symfony/console/Style/StyleInterface.phpS 8&%dS ‘¨Kµ¤,vendor/symfony/console/Style/OutputStyle.php` 8&%d` 2çÛ~¤-vendor/symfony/console/Style/SymfonyStyle.php&:8&%d&:êÞ­a¤3vendor/symfony/console/Tester/ApplicationTester.phpž 8&%dž „Žíé¤@vendor/symfony/console/Tester/Constraint/CommandIsSuccessful.php×8&%d×)±¢¤/vendor/symfony/console/Tester/CommandTester.phpV 8&%dV ¥ ï¤-vendor/symfony/console/Tester/TesterTrait.phpú8&%dúÚý8¤9vendor/symfony/console/Tester/CommandCompletionTester.php\8&%d\Ç?.—¤Dvendor/symfony/console/DependencyInjection/AddConsoleCommandPass.phpØ8&%dØ»‰ÿ¤=vendor/symfony/console/CommandLoader/FactoryCommandLoader.phpm8&%dm‚ *¤?vendor/symfony/console/CommandLoader/CommandLoaderInterface.phpŽ8&%dŽIî9~¤?vendor/symfony/console/CommandLoader/ContainerCommandLoader.php"8&%d"ñÀ¤&vendor/symfony/console/Application.php¼°8&%d¼°©È¤.vendor/symfony/console/Attribute/AsCommand.phpR8&%dReXvS¤2vendor/symfony/console/CI/GithubActionReporter.php 8&%d  K¤(vendor/symfony/console/ConsoleEvents.phpÄ8&%dÄG:GU¤ vendor/symfony/console/Color.phpb8&%db2ôq¤3vendor/symfony/console/SingleCommandApplication.phpG8&%dG‰ ï1¤6vendor/symfony/console/Event/ConsoleTerminateEvent.phpz8&%dzÒ(ô¤3vendor/symfony/console/Event/ConsoleSignalEvent.phpé8&%déXФ4vendor/symfony/console/Event/ConsoleCommandEvent.phpß8&%dßCs±¤2vendor/symfony/console/Event/ConsoleErrorEvent.php18&%d1xtØü¤-vendor/symfony/console/Event/ConsoleEvent.phpà8&%dàì´t¤*vendor/symfony/console/Command/Command.phpøP8&%døP®¸iþ¤0vendor/symfony/console/Command/LockableTrait.php;8&%d;öóT+¤.vendor/symfony/console/Command/ListCommand.php9 8&%d9 õdƒ¤.vendor/symfony/console/Command/HelpCommand.phpB 8&%dB (¤2vendor/symfony/console/Command/CompleteCommand.php/!8&%d/!ÊÕ\<¤.vendor/symfony/console/Command/LazyCommand.phpc8&%dcQ/´¤8vendor/symfony/console/Command/DumpCompletionCommand.phpz8&%dztN€¤=vendor/symfony/console/Command/SignalableCommandInterface.phpÁ8&%dÁýMä/vendor/symfony/console/Input/InputInterface.php¥8&%d¥(i¬F¤0vendor/symfony/console/Input/InputDefinition.php`.8&%d`.bVô*¤*vendor/symfony/console/Input/ArgvInput.phpÈ08&%dÈ0¥ñ¤4vendor/symfony/console/Input/InputAwareInterface.phpP8&%dPS¾ôˤ&vendor/symfony/console/Input/Input.phpH8&%dHU…Τ¤,vendor/symfony/console/Input/StringInput.phpÉ 8&%dÉ 7ÛÈp¤.vendor/symfony/console/Input/InputArgument.php 8&%d D §P¤+vendor/symfony/console/Input/ArrayInput.phpÊ8&%dÊ3z2€¤,vendor/symfony/console/Input/InputOption.php58&%d51K¥¤9vendor/symfony/console/Input/StreamableInputInterface.php~8&%d~r—¤#vendor/symfony/console/Terminal.php~8&%d~]‹t¤Avendor/symfony/console/Completion/Output/BashCompletionOutput.php!8&%d!;‘6-¤Fvendor/symfony/console/Completion/Output/CompletionOutputInterface.php8&%d7K)â¤0vendor/symfony/console/Completion/Suggestion.phpÂ8&%dÂBýµ¤5vendor/symfony/console/Completion/CompletionInput.phpo 8&%do 8 Á›¤;vendor/symfony/console/Completion/CompletionSuggestions.phpv8&%dv]f,¤8vendor/symfony/console/SignalRegistry/SignalRegistry.phpH8&%dH¾suФ,vendor/symfony/console/Question/Question.phpˆ8&%dˆ3¤8vendor/symfony/console/Question/ConfirmationQuestion.php-8&%d-}î¾Î¤2vendor/symfony/console/Question/ChoiceQuestion.phpò8&%dòÁu¤6vendor/symfony/console/EventListener/ErrorListener.phpy 8&%dy [Î Ù¤'vendor/dnoegel/php-xdg-base-dir/LICENSE!8&%d!ÜW&¤+vendor/dnoegel/php-xdg-base-dir/src/Xdg.php… 8&%d… +Qq¤#vendor/composer/autoload_static.php,y8&%d,yè¶ É¤&vendor/composer/xdebug-handler/LICENSE)8&%d)#Ô;^¤4vendor/composer/xdebug-handler/src/XdebugHandler.phpVN8&%dVN*–KÚ¤0vendor/composer/xdebug-handler/src/PhpConfig.php8&%d•„•6¤.vendor/composer/xdebug-handler/src/Process.phpR 8&%dR °ß77¤-vendor/composer/xdebug-handler/src/Status.php×8&%d×µyd¤vendor/composer/LICENSE.8&%d. Õ¤%vendor/composer/autoload_classmap.php†û8&%d†ûÆÉ|¤"vendor/composer/platform_check.phpŸ8&%dŸqK\¤"vendor/composer/autoload_files.php¹8&%d¹káP²¤%vendor/composer/InstalledVersions.phpK?8&%dK? Uܤvendor/composer/ClassLoader.php@8&%d@>]פ!vendor/composer/autoload_psr4.php¶ 8&%d¶ ¹”˜à¤vendor/composer/pcre/LICENSE8&%dhgÔ^¤*vendor/composer/pcre/src/PcreException.php 8&%d ¹b‹‡¤4vendor/composer/pcre/src/MatchStrictGroupsResult.php8&%dº„ÖØ¤9vendor/composer/pcre/src/UnexpectedNullMatchException.php8&%dä»Ó?¤!vendor/composer/pcre/src/Preg.phpD8&%dDWdÓ¤3vendor/composer/pcre/src/MatchWithOffsetsResult.phpò8&%dòB­¤6vendor/composer/pcre/src/MatchAllWithOffsetsResult.php¬8&%d¬£À^y¤7vendor/composer/pcre/src/MatchAllStrictGroupsResult.php8&%d¦•ŽÆ¤*vendor/composer/pcre/src/ReplaceResult.phpù8&%dùΞ¡<¤(vendor/composer/pcre/src/MatchResult.php8&%d’Û–¤"vendor/composer/pcre/src/Regex.php8&%dGòµÍ¤+vendor/composer/pcre/src/MatchAllResult.php™8&%d™ŒJƒJ¤vendor/composer/installed.phpyU8&%dyUïœÒP¤vendor/composer/semver/LICENSE8&%dBhí¤/vendor/composer/semver/src/CompilingMatcher.php5 8&%d5 d‚…c¤=vendor/composer/semver/src/Constraint/MatchNoneConstraint.phpÏ8&%dÏñžž¤/vendor/composer/semver/src/Constraint/Bound.phpI 8&%dI ïòŒÿ¤<vendor/composer/semver/src/Constraint/MatchAllConstraint.phpÓ8&%dÓ°«·¤=vendor/composer/semver/src/Constraint/ConstraintInterface.phpÆ8&%dÆ`òÚ‚¤4vendor/composer/semver/src/Constraint/Constraint.phpÿ08&%dÿ0ÑC«{¤9vendor/composer/semver/src/Constraint/MultiConstraint.phpD#8&%dD#ù}–\¤,vendor/composer/semver/src/VersionParser.phpeT8&%deT,ºf¤'vendor/composer/semver/src/Interval.php£8&%d£Ñåý ¤%vendor/composer/semver/src/Semver.php\ 8&%d\ –$r¤(vendor/composer/semver/src/Intervals.phpØN8&%dØN÷&E¤)vendor/composer/semver/src/Comparator.phpj 8&%dj Çw+±¤!vendor/composer/autoload_real.php¹8&%d¹˜šB?¤'vendor/composer/autoload_namespaces.php‹8&%d‹Š/t¤vendor/webmozart/assert/LICENSE<8&%d<tØ}õ¤&vendor/webmozart/assert/src/Assert.phpÂÉ8&%dÂÉRPJO¤8vendor/webmozart/assert/src/InvalidArgumentException.phpq8&%dqÌlŸ¤%vendor/webmozart/assert/src/Mixin.php=Õ8&%d=ÕüoI„¤ vendor/amphp/byte-stream/LICENSE68&%d6\>W¤(vendor/amphp/byte-stream/lib/Message.phpp8&%dpÁ èè¤-vendor/amphp/byte-stream/lib/OutputStream.phpJ8&%dJŸbØ<¤/vendor/amphp/byte-stream/lib/InMemoryStream.php…8&%d…u>õ˜¤0vendor/amphp/byte-stream/lib/ClosedException.phpq8&%dq«Ï¤1vendor/amphp/byte-stream/lib/PendingReadError.phpÇ8&%dÇ÷Qñf¤/vendor/amphp/byte-stream/lib/IteratorStream.php8&%d‡sìΤ0vendor/amphp/byte-stream/lib/ZlibInputStream.php 8&%d Í$EI¤*vendor/amphp/byte-stream/lib/functions.php¡8&%d¡i³Z¤5vendor/amphp/byte-stream/lib/ResourceOutputStream.php0*8&%d0*ís/¤4vendor/amphp/byte-stream/lib/ResourceInputStream.php<8&%d<#Ës¤0vendor/amphp/byte-stream/lib/StreamException.phpf8&%dfÕu(¤(vendor/amphp/byte-stream/lib/Payload.phpÞ 8&%dÞ `cóõ¤,vendor/amphp/byte-stream/lib/InputStream.phpO8&%dOÂEöe¤Avendor/amphp/byte-stream/lib/Base64/Base64EncodingInputStream.php‰8&%d‰Afñ»¤Bvendor/amphp/byte-stream/lib/Base64/Base64EncodingOutputStream.phpà8&%dà’Nk+¤Avendor/amphp/byte-stream/lib/Base64/Base64DecodingInputStream.phpP8&%dP„Ÿ¤Bvendor/amphp/byte-stream/lib/Base64/Base64DecodingOutputStream.phpý8&%dýäþ›¤1vendor/amphp/byte-stream/lib/ZlibOutputStream.phpg 8&%dg ›€¶ä¤1vendor/amphp/byte-stream/lib/InputStreamChain.php¯8&%d¯¿iZ¬¤-vendor/amphp/byte-stream/lib/OutputBuffer.phpØ8&%dØ­¡¨e¤+vendor/amphp/byte-stream/lib/LineReader.php 8&%d ¤²¤vendor/amphp/amp/LICENSEq8&%dqrg‡¤2vendor/amphp/amp/lib/CombinedCancellationToken.php8&%dðß—¤$vendor/amphp/amp/lib/LazyPromise.phpÂ8&%dÂú;Th¤.vendor/amphp/amp/lib/NullCancellationToken.php¨8&%d¨âìÿ¤ vendor/amphp/amp/lib/Emitter.php8&%d»TÒ“¤0vendor/amphp/amp/lib/Internal/PrivatePromise.php18&%d16 †Z¤1vendor/amphp/amp/lib/Internal/ResolutionQueue.phpŽ 8&%dŽ ó™)¤*vendor/amphp/amp/lib/Internal/Producer.php,8&%d,%)žÛ¤+vendor/amphp/amp/lib/Internal/functions.phpÒ 8&%dÒ §âR¤-vendor/amphp/amp/lib/Internal/Placeholder.php+8&%d+@½hú¤1vendor/amphp/amp/lib/Internal/PrivateIterator.php¼8&%d¼ƒ3³q¤-vendor/amphp/amp/lib/MultiReasonException.php§8&%d§‰c¤&vendor/amphp/amp/lib/CallableMaker.php© 8&%d© õ–¶x¤!vendor/amphp/amp/lib/Iterator.php\8&%d\€þ²¤)vendor/amphp/amp/lib/TimeoutException.php†8&%d†˜:¼Ý¤!vendor/amphp/amp/lib/Producer.phpþ8&%dþžr'ävendor/amphp/amp/lib/Struct.php8&%do­p¤+vendor/amphp/amp/lib/CancelledException.phpk8&%dk%wÕc¤*vendor/amphp/amp/lib/InvalidYieldError.php8&%dnËÖ“¤ vendor/amphp/amp/lib/Delayed.php²8&%d²ƒ•·á¤ vendor/amphp/amp/lib/Success.php8&%d ¤ù`¤"vendor/amphp/amp/lib/functions.php]8&%d]9úo¤vendor/amphp/amp/lib/Loop.phpF8&%dF-lا¤$vendor/amphp/amp/lib/Loop/Driver.phpCg8&%dCg_ÃçÞ¤&vendor/amphp/amp/lib/Loop/EvDriver.php!8&%d! 0ä*vendor/amphp/amp/lib/Loop/NativeDriver.php©88&%d©8A¾!¤%vendor/amphp/amp/lib/Loop/Watcher.phpÿ8&%dÿG°0Q¤1vendor/amphp/amp/lib/Loop/Internal/TimerQueue.phpJ8&%dJÍã|¤+vendor/amphp/amp/lib/Loop/TracingDriver.phpi8&%diݲ~R¤1vendor/amphp/amp/lib/Loop/InvalidWatcherError.php*8&%d*Ò—¸-¤+vendor/amphp/amp/lib/Loop/DriverFactory.php8&%döù‚¤&vendor/amphp/amp/lib/Loop/UvDriver.php¨(8&%d¨(t}ä—¤)vendor/amphp/amp/lib/Loop/EventDriver.phpL%8&%dL%Cûyš¤9vendor/amphp/amp/lib/Loop/UnsupportedFeatureException.php(8&%d(‹ŒÇ¤ vendor/amphp/amp/lib/Promise.phpÄ8&%dÄ™H,®¤ vendor/amphp/amp/lib/Failure.phpÕ8&%dÕ6RXb¤"vendor/amphp/amp/lib/Coroutine.php)8&%d)´÷À¤*vendor/amphp/amp/lib/CancellationToken.php8&%dÄñG¤1vendor/amphp/amp/lib/TimeoutCancellationToken.php38&%d3ÔÆ ¤0vendor/amphp/amp/lib/CancellationTokenSource.php=8&%d=<չߤ!vendor/amphp/amp/lib/Deferred.php)8&%d)wh7¤.vendor/fidry/cpu-core-counter/bin/diagnose.phpx8&%dx¬*4¤-vendor/fidry/cpu-core-counter/bin/execute.phpw8&%dwו¨¤=vendor/fidry/cpu-core-counter/src/NumberOfCpuCoreNotFound.php(8&%d(šY¡€¤>vendor/fidry/cpu-core-counter/src/Executor/ProcessExecutor.phpú8&%dú¨ÊW¤?vendor/fidry/cpu-core-counter/src/Executor/ProcOpenExecutor.php›8&%d›c ’¤4vendor/fidry/cpu-core-counter/src/CpuCoreCounter.phpw8&%dwEΡ’¤/vendor/fidry/cpu-core-counter/src/Diagnoser.phpƒ8&%dƒÐ‚S¤8vendor/fidry/cpu-core-counter/src/Finder/NProcFinder.php.8&%d.ïýò¤:vendor/fidry/cpu-core-counter/src/Finder/CpuInfoFinder.phpç8&%dçä• ¤@vendor/fidry/cpu-core-counter/src/Finder/LscpuPhysicalFinder.php|8&%d|õ!Jq¤@vendor/fidry/cpu-core-counter/src/Finder/ProcOpenBasedFinder.php* 8&%d* 9+²¥¤>vendor/fidry/cpu-core-counter/src/Finder/NullCpuCoreFinder.phpÝ8&%dÝdú‡¤<vendor/fidry/cpu-core-counter/src/Finder/HwLogicalFinder.phpz8&%dzÐ Ù¤?vendor/fidry/cpu-core-counter/src/Finder/DummyCpuCoreFinder.phpE8&%dEŸ(Ä«¤>vendor/fidry/cpu-core-counter/src/Finder/_NProcessorFinder.phpû8&%dû2g}î¤>vendor/fidry/cpu-core-counter/src/Finder/WmicLogicalFinder.phpÄ8&%dÄqæÚ¤=vendor/fidry/cpu-core-counter/src/Finder/NProcessorFinder.php8&%d!·~®¤;vendor/fidry/cpu-core-counter/src/Finder/FinderRegistry.phpi8&%di{ÄG€¤Avendor/fidry/cpu-core-counter/src/Finder/OnlyOnOSFamilyFinder.php´8&%d´ÑÐפ?vendor/fidry/cpu-core-counter/src/Finder/WmicPhysicalFinder.php¯8&%d¯¯0ˆŸ¤?vendor/fidry/cpu-core-counter/src/Finder/LscpuLogicalFinder.phpQ8&%dQF¤gS¤Avendor/fidry/cpu-core-counter/src/Finder/SkipOnOSFamilyFinder.php²8&%d²`„ß4¤=vendor/fidry/cpu-core-counter/src/Finder/HwPhysicalFinder.php~8&%d~4/²u¤:vendor/fidry/cpu-core-counter/src/Finder/CpuCoreFinder.php8&%dõì’J¤-vendor/spatie/array-to-xml/src/ArrayToXml.php´8&%d´YØC¤$vendor/phpstan/phpdoc-parser/LICENSE.8&%d.æ-¤0vendor/phpstan/phpdoc-parser/src/Lexer/Lexer.phpv8&%dv3_»‚¤6vendor/phpstan/phpdoc-parser/src/Parser/TypeParser.phpP8&%dP!†œð¤9vendor/phpstan/phpdoc-parser/src/Parser/TokenIterator.php 8&%d •WË\¤;vendor/phpstan/phpdoc-parser/src/Parser/ConstExprParser.phpf8&%dfY‘)Q¤8vendor/phpstan/phpdoc-parser/src/Parser/PhpDocParser.php™U8&%d™UýèP-¤;vendor/phpstan/phpdoc-parser/src/Parser/ParserException.php8&%dà7!¤Evendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprFalseNode.phpG8&%dGÇðº¤Dvendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprNullNode.phpE8&%dE`P€¼¤Avendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstFetchNode.phpß8&%dßó¹ªc¤Gvendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprIntegerNode.phpÒ8&%dÒ a‰«¤Fvendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprStringNode.phpÑ8&%dÑTI8w¤@vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprNode.phpÊ8&%dÊ–˜©<¤Evendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprFloatNode.phpÐ8&%dЬÒÐϤDvendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprTrueNode.phpE8&%dEŸ¬¤Evendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprArrayNode.phpP8&%dPQ\pô¤Ivendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprArrayItemNode.phpÔ8&%dÔçÞŠ9¤?vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocChildNode.phpÉ8&%dÉ9Ólñ¤Dvendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TemplateTagValueNode.php58&%d5³7Eì¤Bvendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ReturnTagValueNode.phpÅ8&%dÅg˜þ¤?vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/VarTagValueNode.phpf8&%dfižæ‹¤Cvendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/SelfOutTagValueNode.phpÈ8&%dÈb\1†¤Cvendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ExtendsTagValueNode.phpÛ8&%dÛãôm¤Dvendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PropertyTagValueNode.phpQ8&%dQqU¤Dvendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamOutTagValueNode.phpV8&%dVöò´å¤Fvendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ImplementsTagValueNode.phpÞ8&%dÞ›l‘¤Hvendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/AssertTagMethodValueNode.php 8&%d Œ3¥Œ¤>vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocTextNode.phpÆ8&%dÆÀ¯ŸÎ¤Jvendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/AssertTagPropertyValueNode.php8&%d¢Ò'¤=vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocTagNode.phpa8&%da¯sÙr¤Bvendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ThrowsTagValueNode.phpÅ8&%dÅ&¢Ü=¤:vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocNode.php$8&%d$.^J¤Kvendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TypeAliasImportTagValueNode.phpÆ8&%dÆ€÷ѤKvendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/MethodTagValueParameterNode.php¦8&%d¦ÊâÕĤEvendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TypeAliasTagValueNode.php›8&%d›ë )‚¤Avendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/MixinTagValueNode.phpÄ8&%dÄ€òÌõ¤Cvendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/InvalidTagValueNode.phpç8&%dçÆÈ†¤Bvendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/AssertTagValueNode.php”8&%d”³,%-¤@vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/UsesTagValueNode.phpØ8&%dØþsŸö¤Ivendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TypelessParamTagValueNode.php8&%d\óò¤Fvendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/DeprecatedTagValueNode.php8&%d26ÎH¤Cvendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/GenericTagValueNode.phpâ8&%dây¯¿¤Bvendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocTagValueNode.phpÌ8&%d̘Б]¤Bvendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/MethodTagValueNode.php€8&%d€ͫΦ¤Avendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamTagValueNode.php¯8&%d¯ ¨Û¤7vendor/phpstan/phpdoc-parser/src/Ast/NodeAttributes.phpÄ8&%dÄ›þÚܤ;vendor/phpstan/phpdoc-parser/src/Ast/Type/ConstTypeNode.php>8&%d>XΤ6vendor/phpstan/phpdoc-parser/src/Ast/Type/TypeNode.phpÀ8&%dÀD%Yˆ¤=vendor/phpstan/phpdoc-parser/src/Ast/Type/GenericTypeNode.phpÝ8&%dÝvendor/phpstan/phpdoc-parser/src/Ast/Type/NullableTypeNode.phpÉ8&%dÉB‡—±¤@vendor/phpstan/phpdoc-parser/src/Ast/Type/IdentifierTypeNode.phpÁ8&%dÁÊÏ×V¤;vendor/phpstan/phpdoc-parser/src/Ast/Type/ArrayTypeNode.phpÇ8&%dÇ=^\r¤@vendor/phpstan/phpdoc-parser/src/Ast/Type/ArrayShapeItemNode.php¨8&%d¨X”!S¤Bvendor/phpstan/phpdoc-parser/src/Ast/Type/OffsetAccessTypeNode.phpC8&%dCDÛ†.¤>vendor/phpstan/phpdoc-parser/src/Ast/Type/CallableTypeNode.php[8&%d[ÅOͲ¤:vendor/phpstan/phpdoc-parser/src/Ast/Type/ThisTypeNode.php78&%d7ó•q3¤-vendor/phpstan/phpdoc-parser/src/Ast/Node.phpŽ8&%dŽ"ŽË¤*vendor/phpdocumentor/type-resolver/LICENSE88&%d8á‰Ê¤/vendor/phpdocumentor/type-resolver/src/Type.phpë8&%dë7²Ä9¤5vendor/phpdocumentor/type-resolver/src/Types/This.phpw8&%dw\ñ‹ ¤?vendor/phpdocumentor/type-resolver/src/Types/ContextFactory.php 78&%d 7 .¤:vendor/phpdocumentor/type-resolver/src/Types/Iterable_.phpN8&%dN.n˜M¤7vendor/phpdocumentor/type-resolver/src/Types/Never_.php8&%dôPÍö¤7vendor/phpdocumentor/type-resolver/src/Types/Array_.phpä8&%dä´¹þ¤8vendor/phpdocumentor/type-resolver/src/Types/String_.php‘8&%d‘wWÀ”¤:vendor/phpdocumentor/type-resolver/src/Types/Callable_.phpÄ8&%dÄV¤Dvendor/phpdocumentor/reflection-docblock/src/DocBlock/Serializer.phpI8&%dIìÏzZ¤Ivendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Deprecated.php6 8&%d6 @ Ò¡¤Fvendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Return_.phpx8&%dxØa2¤Wvendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter/AlignFormatter.phpž8&%džuÄP¤]vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter/PassthroughFormatter.phpæ8&%dæõS§ý¤Ivendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/InvalidTag.phpJ8&%dJôN¸¤Dvendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Param.phpx8&%dxMG7¤Gvendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Property.phpC8&%dCgfš.¤Fvendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Generic.phpÒ 8&%dÒ ¡îˆÏ¤Hvendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter.php<8&%d<Ùß<¤Jvendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/TagWithType.phpÆ8&%dÆùçÓ¤Evendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Throws.phpy8&%dy†M›I¤Lvendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyWrite.phpO8&%dO¢C̤Evendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Covers.phpß 8&%dß &®T¤Fvendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Example.php 8&%d æSý¥¤Svendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/StaticMethod.php-8&%d-DKW®¤Rvendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Reference.phpã8&%dãrö¹“¤Nvendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Fqsen.phpJ8&%dJq=5¤Lvendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Url.phpë8&%dë먮¤Evendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Method.php" 8&%d" e½3î¤Dvendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Since.php¢ 8&%d¢ ´Ó§r¤Cvendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Var_.php:8&%d:GQ ¤Kvendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyRead.phpQ8&%dQ–$8§¤Fvendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/BaseTag.php¹8&%d¹R(‘…¤Fvendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Version.php÷ 8&%d÷ ™+[¤Bvendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/See.php­ 8&%d­ y‰½æ¤Cvendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Link.phpÝ8&%dÝ>Þ¨¤Evendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Source.phpþ 8&%dþ «V©·¤Evendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Author.phpÈ 8&%dÈ õÇá¤Cvendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Uses.php¶ 8&%d¶ øTÎG¤Lvendor/phpdocumentor/reflection-docblock/src/DocBlock/StandardTagFactory.phpE28&%dE2cœÈ¤Dvendor/phpdocumentor/reflection-docblock/src/DocBlock/TagFactory.php¤8&%d¤^Lÿ+¤Gvendor/phpdocumentor/reflection-docblock/src/DocBlock/ExampleFinder.phpJ8&%dJF`7¤Hvendor/phpdocumentor/reflection-docblock/src/Exception/PcreException.php¨8&%d¨œ$¤Ivendor/phpdocumentor/reflection-docblock/src/DocBlockFactoryInterface.php£8&%d£s†$ݤvendor/nikic/php-parser/LICENSEð8&%dð¥ä”*¤Pvendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.phpÔ8&%dÔ½žy¿¤Mvendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReverseEmulator.php÷8&%d÷·ܤSvendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ExplicitOctalEmulator.php¿8&%d¿µd¨¤Wvendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/CoaleseEqualTokenEmulator.php)8&%d)s"€É¤[vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReadonlyFunctionTokenEmulator.php8&%dÒ}Xe¤Svendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReadonlyTokenEmulator.phpj8&%dj-ýo¤Svendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.phpñ8&%dñœL}¤Mvendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.phpâ8&%dâø0¤Wvendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FlexibleDocStringEmulator.phpŒ 8&%dŒ –òô(¤]vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NumericLiteralSeparatorEmulator.phpt8&%dtYŸ¯ ¤Kvendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulator.php„8&%d„ÔË)פOvendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AttributeEmulator.php8&%dp¢PˤMvendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FnTokenEmulator.phpË8&%dËf¼F¤Ovendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/EnumTokenEmulator.phpÉ8&%dÉcÝÌæ¤9vendor/nikic/php-parser/lib/PhpParser/Lexer/Emulative.phpN$8&%dN$})ͤ7vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.phpl'8&%dl'Þ³‚³¤Bvendor/nikic/php-parser/lib/PhpParser/Node/VariadicPlaceholder.php¸8&%d¸«³ͤ<vendor/nikic/php-parser/lib/PhpParser/Node/Name/Relative.phpÛ8&%dÛòL¿†¤Bvendor/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.phpÞ8&%dÞ;ŒºÛ¤4vendor/nikic/php-parser/lib/PhpParser/Node/Param.php€8&%d€GKE¤8vendor/nikic/php-parser/lib/PhpParser/Node/UnionType.phpÆ8&%dÆ-¥›*¤3vendor/nikic/php-parser/lib/PhpParser/Node/Name.php>8&%d>(¬Õ:¤7vendor/nikic/php-parser/lib/PhpParser/Node/MatchArm.phpÛ8&%dÛÏbþ¤=vendor/nikic/php-parser/lib/PhpParser/Node/AttributeGroup.phpÖ8&%dÖÞ¥‹|¤3vendor/nikic/php-parser/lib/PhpParser/Node/Expr.php³8&%d³ia’¤=vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/String_.phpž8&%dž~Wh1¤Gvendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Trait_.phpr8&%druàЦ¤Evendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Line.phpn8&%dnØÙu!¤Gvendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Method.phpt8&%dtöjîg¤Jvendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Function_.php{8&%d{çJ¤Dvendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Dir.phpk8&%dkš@졤Gvendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Class_.phpr8&%dr_Uš¤Evendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/File.phpn8&%dn¶åCŤKvendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Namespace_.php~8&%d~!ß—œ¤>vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Encapsed.php8&%dEÐë¤=vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.phpß 8&%dß øÙg‹¤Hvendor/nikic/php-parser/lib/PhpParser/Node/Scalar/EncapsedStringPart.php8&%dèùM¤=vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/DNumber.php8&%dÈòÙ¤@vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst.php8&%ddícu¤;vendor/nikic/php-parser/lib/PhpParser/Node/NullableType.phpæ8&%dæÁÑ„¤:vendor/nikic/php-parser/lib/PhpParser/Node/ComplexType.phpq8&%dq¨ôˤ5vendor/nikic/php-parser/lib/PhpParser/Node/Const_.php8&%d¦»Aý¤8vendor/nikic/php-parser/lib/PhpParser/Node/Attribute.phpu8&%duúY3¤@vendor/nikic/php-parser/lib/PhpParser/Node/VarLikeIdentifier.php8&%d7Ãùã¤;vendor/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php8&%džqMþ¤9vendor/nikic/php-parser/lib/PhpParser/Node/Identifier.php 8&%d l©²Æ¤:vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php!8&%d!ßUã¤9vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Label.php8&%d¯p˜¤9vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Enum_.php[8&%d[Žq¤:vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Break_.phpè8&%dèlõ`i¤@vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/HaltCompiler.php%8&%d%¿ˆC¯¤;vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Return_.phpÔ8&%dÔ{wY¤<vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Foreach_.php8&%d8¢¾B¤:vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Throw_.phpÌ8&%dÌÀ輤7vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/If_.phpX8&%dXi¹¤:vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Unset_.phpÎ8&%dίÀ{ ¤:vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php©8&%d©fùü•¤<vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Property.phpš 8&%dš ƒ—”é¤;vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Switch_.phpS8&%dS6]Èݤ8vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/For_.php\8&%d\Lï­¤<vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/GroupUse.php78&%d7žóô‰¤9vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Case_.phpŠ8&%dŠïI…¤Fvendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation.php88&%d8áá7¤7vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Do_.php`8&%d`9a&/¤Dvendor/nikic/php-parser/lib/PhpParser/Node/Stmt/PropertyProperty.phpû8&%dûQÇ‹¾¤=vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/StaticVar.phpÄ8&%dÄŠR’ ¤>vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php8&%d7žÅµ¤<vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUse.phpµ8&%dµ9Ì«¤Lvendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Alias.php_8&%d_«/ßì¤Qvendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.phpx8&%dx¢À6¤:vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.phpc8&%dcU¾ÑÛ¤;vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Global_.phpÖ8&%dÖìõ5 ¤7vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Nop.php^8&%d^¨ù¤:vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Const_.phpè8&%dè8$Y¤=vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.phpY 8&%dY öé±#¤9vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Goto_.php=8&%d=¸lŒÀ¤<vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/EnumCase.phpà8&%dàA¿‹¨¤:vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.php‘8&%d‘ ²Ã€¤?vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php*8&%d*]3Hš¤>vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Expression.php8&%dú± ¤8vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Use_.phpŠ8&%dŠ7ü¯ü¤;vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Static_.phpã8&%dãu:˜0¤<vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Finally_.phpÍ8&%dÍ?·b*¤9vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Echo_.phpÂ8&%dÂ17'¤>vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/InlineHTML.php¼8&%d¼’€¤=vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.phpº 8&%dº ÷ˆz¡¤9vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Else_.phpÅ8&%dųjð ¤=vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Continue_.php÷8&%d÷{l+¤<vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Declare_.php¤8&%d¤à%é¤;vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ElseIf_.phpg8&%dg{ˆÅ‚¤:vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php¢8&%d¢wŒ^¤>vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Namespace_.phpÝ8&%dÝb”H¤<vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.phpB8&%dB­ ! ¤Bvendor/nikic/php-parser/lib/PhpParser/Node/Stmt/DeclareDeclare.php´8&%d´ã;Gx¤>vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.phpØ8&%dØȬ*ã¤?vendor/nikic/php-parser/lib/PhpParser/Node/IntersectionType.phpí8&%díY’‘¤5vendor/nikic/php-parser/lib/PhpParser/Node/Scalar.phpz8&%dzXñ†¤:vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Print_.php¬8&%d¬=vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BitwiseNot.php¸8&%d¸˜Ì¬ž¤=vendor/nikic/php-parser/lib/PhpParser/Node/Expr/YieldFrom.phpÆ8&%dÆQŠïü¤;vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.phpà 8&%dà ¹ ±š¤9vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Eval_.php©8&%d©OE¯¤<vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Include_.phpÀ8&%dÀ–½³¤<vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php³8&%d³žN@Þ¤:vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.php©8&%d©}„°þ¤;vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.php¬8&%d¬ͧô8¤8vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast.php_8&%d_'+;ô¤:vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Throw_.phpÆ8&%dÆÄ{莤>vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.php¿8&%d¿lê²:¤:vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Array_.phpV8&%dVˆä˜¤:vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Assign.php58&%d5 Uð«¤:vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.php­8&%d­íwŤ=vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ShellExec.phpÝ8&%dÝY#ޤAvendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayDimFetch.phpk8&%dkñ¥µ¤:vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Match_.php×8&%d×ý`X¤:vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Clone_.php©8&%d©øøÙΤAvendor/nikic/php-parser/lib/PhpParser/Node/Expr/PropertyFetch.php8&%dF–>¤:vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.phpz8&%dzàâ÷¤=vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignRef.phpf8&%df6ÎÑ,¤>vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php¸8&%d¸Špã ¤>vendor/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.phpš8&%dšö}Âa¤Fvendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafeMethodCall.php±8&%d±î`Õ.¤;vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php 8&%d ctI¤Avendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Plus.php8&%dªoê¤Evendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Coalesce.php8&%dlÎÒ¤Fvendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftLeft.php8&%d¦²§Œ¤@vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mul.php8&%d<¤@vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Pow.php8&%dNù x¤Fvendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseOr.php8&%dÿ±”‰¤Gvendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftRight.php8&%dÞ–¢U¤Cvendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Concat.php8&%d¥•r¤Bvendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Minus.php8&%do¢¶N¤@vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mod.php8&%d±ƒw¤Gvendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseXor.php8&%dÁðGI¤Gvendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.php8&%dX¨%¦¤@vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Div.php8&%d)Ùã$¤=vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Int_.php8&%d¼~Œó¤?vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Unset_.php8&%d­sŸ¡¤?vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Array_.php8&%dÕÍiä¤@vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/String_.php8&%dޱ"¤?vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Double.php¹8&%d¹§â4H¤@vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Object_.php8&%dƒ¬t€¤>vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Bool_.php8&%dIY¤>vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BooleanNot.phpÅ8&%dÅç[éK¤Ivendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafePropertyFetch.php8&%duGx˜¤<vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp.php8&%dV‹ ¤Kvendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/SmallerOrEqual.phpw8&%dwGx^¤Avendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Plus.phpb8&%dbét ¤Fvendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Identical.phpn8&%dnThº¤Ivendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotIdentical.phpt8&%dtÚ}ü¤Evendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Coalesce.phpk8&%dkë ×ý¤Gvendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalAnd.phpp8&%dp±ãr¤Fvendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftLeft.phpm8&%dmƒsÈŠ¤@vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mul.php`8&%d`âë=q¤@vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Pow.phpa8&%da$s¯ç¤Fvendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Spaceship.phpn8&%dnú‹F—¤Fvendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseOr.phpl8&%dl9zi”¤Gvendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftRight.phpo8&%doi±Äâ¤Cvendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Concat.phpf8&%df%ªZ¤Evendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotEqual.phpk8&%dkSêä~¤Bvendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Minus.phpd8&%dd ^¤Fvendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanOr.phpm8&%dméÞJ¤Gvendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalXor.phpp8&%dpÐ|»¤Gvendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanAnd.phpo8&%do( 8¤Fvendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalOr.phpm8&%dm6F[¤Bvendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Equal.phpe8&%deg£ø”¤Kvendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.phpw8&%dw¦Ba¤@vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mod.php`8&%d` x¤Gvendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseXor.phpn8&%dnÌØ¤Dvendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Smaller.phph8&%dhy[郤Gvendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.phpn8&%dn„ ¤Dvendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Greater.phph8&%dhÍÐùÁ¤@vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Div.php`8&%d`÷O¤;vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.php¬8&%d¬®væ#¤<vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp.php8&%dmã0.¤>vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ClosureUse.php¥8&%d¥±ÆŒ7¤Avendor/nikic/php-parser/lib/PhpParser/Node/Expr/ErrorSuppress.phpÂ8&%dÂïÂŤ=vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.phpÂ8&%dÂPÄÝì¤?vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.phpŽ8&%dŽ®Éun¤:vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Empty_.php¬8&%d¬å&Õ’¤>vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ConstFetch.phpî8&%dî˜ü5A¤:vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreInc.php©8&%d©óò)Z¤Avendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrowFunction.phpÄ 8&%dÄ "Év¤9vendor/nikic/php-parser/lib/PhpParser/Node/Expr/List_.php8&%d}#¤<vendor/nikic/php-parser/lib/PhpParser/Node/Expr/FuncCall.php`8&%d`‡€ìù¤<vendor/nikic/php-parser/lib/PhpParser/Node/Expr/CallLike.phpb8&%db°t2“¤Cvendor/nikic/php-parser/lib/PhpParser/Node/Expr/ClassConstFetch.php08&%d0‡A¤8vendor/nikic/php-parser/lib/PhpParser/Node/Expr/New_.phpÖ8&%dÖžõ7Ȥ9vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Exit_.php#8&%d#¼þíô¤9vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Error.php 8&%d ¬+¶¤2vendor/nikic/php-parser/lib/PhpParser/Node/Arg.php]8&%d]!&‘ï¤3vendor/nikic/php-parser/lib/PhpParser/Node/Stmt.php³8&%d³¾¾¶?¤9vendor/nikic/php-parser/lib/PhpParser/Parser/Multiple.phpâ8&%dâ;àG¤5vendor/nikic/php-parser/lib/PhpParser/Parser/Php5.phpL,8&%dL,õY¤5vendor/nikic/php-parser/lib/PhpParser/Parser/Php7.php‘O8&%d‘O'êJ¤7vendor/nikic/php-parser/lib/PhpParser/Parser/Tokens.php58&%d5|tŽê¤5vendor/nikic/php-parser/lib/PhpParser/NameContext.php+&8&%d+&b¥h¤6vendor/nikic/php-parser/lib/PhpParser/NodeAbstract.phpi8&%diù“»º¤<vendor/nikic/php-parser/lib/PhpParser/ConstExprEvaluator.php™%8&%d™%Ê„gޤ7vendor/nikic/php-parser/lib/PhpParser/ParserFactory.php÷8&%d÷úHPr¤Fvendor/nikic/php-parser/lib/PhpParser/ConstExprEvaluationException.phpn8&%dn»33¤Lvendor/nikic/php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.phpQ8&%dQÚ¢ÌU¤>vendor/nikic/php-parser/lib/PhpParser/Internal/TokenStream.php $8&%d $Ø„Bê¤;vendor/nikic/php-parser/lib/PhpParser/Internal/DiffElem.phpF8&%dFãóïr¤9vendor/nikic/php-parser/lib/PhpParser/Internal/Differ.php<8&%d<¢ìĤ?vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.phpˆá8&%dˆá;{âÁ¤?vendor/nikic/php-parser/lib/PhpParser/ErrorHandler/Throwing.php³8&%d³ Ì8¤Avendor/nikic/php-parser/lib/PhpParser/ErrorHandler/Collecting.phpÁ8&%dÁ.Nrl¤5vendor/nikic/php-parser/lib/PhpParser/JsonDecoder.php/ 8&%d/ ¯ms/¤1vendor/nikic/php-parser/lib/PhpParser/Comment.phpÃ8&%dÃ5LS¤8vendor/nikic/php-parser/lib/PhpParser/ParserAbstract.phpž8&%dž¤¬Ƥ8vendor/nikic/php-parser/lib/PhpParser/BuilderFactory.phpˆ+8&%dˆ+/æÂ?¤@vendor/nikic/php-parser/lib/PhpParser/NodeTraverserInterface.php‹8&%d‹ý1j¢¤4vendor/nikic/php-parser/lib/PhpParser/NodeDumper.php¾8&%d¾ËAóâ¤8vendor/nikic/php-parser/lib/PhpParser/Builder/Trait_.php!8&%d!Žÿ誤7vendor/nikic/php-parser/lib/PhpParser/Builder/Enum_.phpõ 8&%dõ s®_=¤7vendor/nikic/php-parser/lib/PhpParser/Builder/Param.phpÌ 8&%dÌ É=—¤:vendor/nikic/php-parser/lib/PhpParser/Builder/Property.phpô8&%dôI̓¤Dvendor/nikic/php-parser/lib/PhpParser/Builder/TraitUseAdaptation.phpÕ8&%dÕ>¹7[¤=vendor/nikic/php-parser/lib/PhpParser/Builder/Declaration.php 8&%d óèðö¤<vendor/nikic/php-parser/lib/PhpParser/Builder/Interface_.php" 8&%d" L˜^d¤:vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUse.php¢8&%d¢C|¤8vendor/nikic/php-parser/lib/PhpParser/Builder/Method.phpÛ8&%dÛ2À¹S¤;vendor/nikic/php-parser/lib/PhpParser/Builder/Function_.php‘8&%d‘È* ¤:vendor/nikic/php-parser/lib/PhpParser/Builder/EnumCase.php¸8&%d¸Øü¿:¤6vendor/nikic/php-parser/lib/PhpParser/Builder/Use_.php*8&%d*åRù`¤>vendor/nikic/php-parser/lib/PhpParser/Builder/FunctionLike.php8&%d0eÂÛ¤8vendor/nikic/php-parser/lib/PhpParser/Builder/Class_.php8&%dU¢yΤ<vendor/nikic/php-parser/lib/PhpParser/Builder/Namespace_.php…8&%d…R èX¤<vendor/nikic/php-parser/lib/PhpParser/Builder/ClassConst.phpÖ 8&%dÖ 6wÁ)¤0vendor/nikic/php-parser/lib/PhpParser/Parser.phpŒ8&%dŒ‡.œS¤Kvendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NodeConnectingVisitor.php¹8&%d¹çº=”¤Ivendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FirstFindingVisitor.php88&%d8ÌôÎç¤Dvendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FindingVisitor.php±8&%d±Bh(9¤Mvendor/nikic/php-parser/lib/PhpParser/NodeVisitor/ParentConnectingVisitor.php¢8&%d¢‰TÒ¤Dvendor/nikic/php-parser/lib/PhpParser/NodeVisitor/CloningVisitor.php?8&%d?Ÿà(¤Bvendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.phpø&8&%dø&ö0ò¤=vendor/nikic/php-parser/lib/PhpParser/NodeVisitorAbstract.phpÛ8&%dÛ90¤/vendor/nikic/php-parser/lib/PhpParser/Lexer.phpõZ8&%dõZdzݤ¤5vendor/nikic/php-parser/lib/PhpParser/Comment/Doc.php–8&%d–ùO=÷¤1vendor/nikic/php-parser/lib/PhpParser/Builder.phpã8&%dãæüü~¤5vendor/nikic/php-parser/lib/PhpParser/NodeVisitor.phpÿ8&%dÿ~6c¤@vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php+¤8&%d+¤þ¤AÔ¤.vendor/nikic/php-parser/lib/PhpParser/Node.php8&%dò4Ìò¤8vendor/nikic/php-parser/lib/PhpParser/BuilderHelpers.php %8&%d %ŠȤ4vendor/nikic/php-parser/lib/PhpParser/NodeFinder.phpä 8&%dä qÖŽš¤6vendor/nikic/php-parser/lib/PhpParser/ErrorHandler.php>8&%d>Y„Þܤ/vendor/nikic/php-parser/lib/PhpParser/Error.phpÇ8&%dÇ9’8c¤%vendor/nikic/php-parser/bin/php-parsez8&%dz­ß"‘¤2vendor/nikic/php-parser/grammar/rebuildParsers.phpÞ8&%dÞVÒפ,vendor/nikic/php-parser/grammar/phpyLang.php¥8&%d¥ÎL¤&vendor/nikic/php-parser/grammar/php5.yÃÈ8&%dÃÈP%PG¤(vendor/nikic/php-parser/grammar/tokens.y 8&%d  C~j¤/vendor/nikic/php-parser/grammar/parser.template 8&%d -ÉšQ¤&vendor/nikic/php-parser/grammar/php7.yá8&%dá[vt[¤/vendor/nikic/php-parser/grammar/tokens.template*8&%d*”‰_Ö¤%vendor/netresearch/jsonmapper/LICENSER(8&%dR((}—Ф0vendor/netresearch/jsonmapper/src/JsonMapper.phpòl8&%dòlIú›)¤:vendor/netresearch/jsonmapper/src/JsonMapper/Exception.php08&%d0nÜh(¤vendor/autoload.php8&%d0j®Ü¤3docs/running_psalm/issues/NullPropertyAssignment.mdy8&%dy Ãp¦¤1docs/running_psalm/issues/PropertyTypeCoercion.md8&%d¨Ê ¤/docs/running_psalm/issues/UnusedForeachValue.mdá8&%dáëöW¤7docs/running_psalm/issues/ConstantDeclarationInTrait.md¸8&%d¸üÿ9[¤2docs/running_psalm/issues/RedundantFunctionCall.mdî8&%dî¦°çø¤4docs/running_psalm/issues/MethodSignatureMismatch.md'8&%d'ÿîd:¤3docs/running_psalm/issues/InvalidLiteralArgument.md8&%dbgK¤0docs/running_psalm/issues/MissingPropertyType.md…8&%d…`Ö¹¤)docs/running_psalm/issues/InvalidCatch.mdÂ8&%d²®,¤5docs/running_psalm/issues/ImpurePropertyAssignment.mdü8&%düaè3"¤2docs/running_psalm/issues/PossiblyFalseArgument.mdT8&%dTM¿¤/docs/running_psalm/issues/InvalidArrayAccess.md–8&%d–[äH¤<docs/running_psalm/issues/PossiblyUndefinedGlobalVariable.md²8&%d²°tf@¤(docs/running_psalm/issues/TaintedSSRF.mdO8&%dO8¼¾¤)docs/running_psalm/issues/MixedOperand.mdW8&%dW¢TÜ ¤7docs/running_psalm/issues/PossiblyInvalidDocblockTag.mdå8&%dåE)¤5docs/running_psalm/issues/MissingClosureReturnType.md8&%dmÜúj¤/docs/running_psalm/issues/InvalidStringClass.mdÚ8&%dÚ*¸’q¤,docs/running_psalm/issues/InvalidArgument.mdz8&%dzŒ•ɤAdocs/running_psalm/issues/RedundantPropertyInitializationCheck.md38&%d3ørAå¤>docs/running_psalm/issues/MethodSignatureMustOmitReturnType.mdË8&%dËå­#¤+docs/running_psalm/issues/DuplicateClass.md8&%d–¤7docs/running_psalm/issues/PossiblyInvalidArrayOffset.mdÖ8&%dÖ(;%¤2docs/running_psalm/issues/UninitializedProperty.md8&%d }¤(docs/running_psalm/issues/TaintedEval.mdA8&%dAÅø<¤4docs/running_psalm/issues/MixedReturnTypeCoercion.mdæ8&%dæLßj•¤.docs/running_psalm/issues/ParamNameMismatch.md 8&%d 3…¤+docs/running_psalm/issues/UnusedProperty.md8&%dsP^Ÿ¤>docs/running_psalm/issues/ReferenceReusedFromConfusingScope.md×8&%d×¥+›h¤2docs/running_psalm/issues/NoInterfaceProperties.md-8&%d-Ë®/¤3docs/running_psalm/issues/InvalidPassByReference.md²8&%d²pà¤,docs/running_psalm/issues/MixedAssignment.mdú8&%dúû=Ùï¤6docs/running_psalm/issues/InaccessibleClassConstant.mdÂ8&%dÂÙ –¤*docs/running_psalm/issues/TaintedCookie.md®8&%d®¢Ä¤0docs/running_psalm/issues/UnresolvableInclude.mdÅ8&%dÅÐÎû¤+docs/running_psalm/issues/UndefinedTrait.mdq8&%dqݹͤ1docs/running_psalm/issues/PossiblyNullIterator.md©8&%d©ia)•¤=docs/running_psalm/issues/UndefinedMagicPropertyAssignment.md38&%d373æ¤/docs/running_psalm/issues/DeprecatedConstant.md 8&%d dÇŒ¤.docs/running_psalm/issues/TaintedUserSecret.md†8&%d†Zû¿ý¤2docs/running_psalm/issues/AbstractInstantiation.md‹8&%d‹¡!–Ȥ*docs/running_psalm/issues/InvalidParent.md¡8&%d¡û„ÆÓ¤,docs/running_psalm/issues/ComplexFunction.mdi8&%di{Τ,docs/running_psalm/issues/InvalidDocblock.mdt8&%dt%F z¤)docs/running_psalm/issues/TaintedInput.mdB8&%dBæü¨ú¤*docs/running_psalm/issues/InvalidGlobal.mdZ8&%dZš¤1docs/running_psalm/issues/ImpureStaticVariable.md8&%d– ¤.docs/running_psalm/issues/InvalidMethodCall.mdt8&%dtêlq ¤)docs/running_psalm/issues/NullArgument.md°8&%d°Ï¥Å¤/docs/running_psalm/issues/UnusedClosureParam.mdÐ8&%dÐz<¤1docs/running_psalm/issues/UndefinedMagicMethod.mdô8&%dôÓðê¤3docs/running_psalm/issues/UndefinedPropertyFetch.mdª8&%dª¨~h¤/docs/running_psalm/issues/UndefinedInterface.md²8&%d²g@vV¤8docs/running_psalm/issues/PropertyNotSetInConstructor.md·8&%d·wÿõä,docs/running_psalm/issues/UnevaluatedCode.md¾8&%d¾àÔß’¤4docs/running_psalm/issues/PossiblyUndefinedMethod.mdã8&%dãà¤Ù¤:docs/running_psalm/issues/ExtensionRequirementViolation.mdi8&%di§³KZ¤1docs/running_psalm/issues/ImplicitToStringCast.mdt8&%dtíÛ!´¤5docs/running_psalm/issues/OverriddenPropertyAccess.md 8&%d ¾­7í¤-docs/running_psalm/issues/DeprecatedMethod.mdc8&%dc^«Ó‚¤2docs/running_psalm/issues/DirectConstructorCall.md8&%dÆnW…¤+docs/running_psalm/issues/ImpureVariable.mdÿ8&%dÿ¡È‰¤2docs/running_psalm/issues/PossiblyFalseIterator.md«8&%d«°I®¤0docs/running_psalm/issues/UnusedDocblockParam.mdP8&%dPaoÙª¤4docs/running_psalm/issues/MixedInferredReturnType.md 8&%d Þú>¤9docs/running_psalm/issues/ImplementedParamTypeMismatch.md 8&%d 6±J¤1docs/running_psalm/issues/InvalidPropertyFetch.md8&%dŽ`&¤(docs/running_psalm/issues/PluginIssue.md*8&%d*Ÿ·xͤ9docs/running_psalm/issues/UnimplementedInterfaceMethod.mdÖ8&%dÖ_·פ,docs/running_psalm/issues/MixedMethodCall.mdf8&%dfx!ú¤1docs/running_psalm/issues/ArgumentTypeCoercion.md]8&%d]?&Ü^¤8docs/running_psalm/issues/UnimplementedAbstractMethod.mdà8&%dàÓÜ+a¤@docs/running_psalm/issues/PossiblyNullPropertyAssignmentValue.md$8&%d$-ÐÝ}¤3docs/running_psalm/issues/InvalidArrayAssignment.md}8&%d}µØíQ¤)docs/running_psalm/issues/UnusedMethod.mdŸ8&%dŸ“:V¤(docs/running_psalm/issues/MissingFile.md†8&%d†H3œG¤3docs/running_psalm/issues/InterfaceInstantiation.md‚8&%d‚Z¦æ¤1docs/running_psalm/issues/PossiblyInvalidClone.mdÂ8&%d d€Œ¤+docs/running_psalm/issues/UndefinedClass.mdh8&%dh Ëï¤6docs/running_psalm/issues/InvalidPropertyAssignment.mdŠ8&%dŠÎD¤¤0docs/running_psalm/issues/PossiblyNullOperand.md¹8&%d¹‹‘ פ1docs/running_psalm/issues/PossiblyFalseOperand.mdë8&%dëÎ×´¤/docs/running_psalm/issues/UnusedFunctionCall.mdÚ8&%dÚ=Åq¤.docs/running_psalm/issues/DuplicateArrayKey.mdÚ8&%dÚÅßñ_¤3docs/running_psalm/issues/OverriddenMethodAccess.mdÓ8&%dÓÃín¤(docs/running_psalm/issues/UnusedClass.mdö8&%döH‡YÚ¤5docs/running_psalm/issues/NonInvariantPropertyType.mdN8&%dN™Í4¤:docs/running_psalm/issues/MismatchingDocblockReturnType.md8&%dB ùs¤9docs/running_psalm/issues/ReferenceConstraintViolation.md›8&%d› sϤ+docs/running_psalm/issues/InternalMethod.mdÜ8&%dÜŒçѤ.docs/running_psalm/issues/UndefinedFunction.mdf8&%dfŽå¢T¤3docs/running_psalm/issues/MixedArrayTypeCoercion.md28&%d2{›¤2docs/running_psalm/issues/MissingThrowsDocblock.md†8&%d† *È"¤6docs/running_psalm/issues/PossiblyUnusedReturnValue.md 8&%d 0›Æ ¤,docs/running_psalm/issues/InvalidIterator.md„8&%d„G%¤-docs/running_psalm/issues/InvalidAttribute.md+8&%d+)֫ɤ.docs/running_psalm/issues/MissingReturnType.mdØ8&%dØLäÑÆ¤/docs/running_psalm/issues/MixedPropertyFetch.mdÀ8&%dÀ—FÔF¤)docs/running_psalm/issues/InvalidScope.mda8&%dal¿Ø#¤5docs/running_psalm/issues/UnnecessaryVarAnnotation.md8&%dÉuÐf¤-docs/running_psalm/issues/UnusedMethodCall.md„8&%d„Ä0íT¤+docs/running_psalm/issues/InvalidOperand.md‚8&%d‚jVzޤ4docs/running_psalm/issues/MixedPropertyAssignment.mdÇ8&%dÇK·`¤2docs/running_psalm/issues/TaintedTextWithQuotes.mdï8&%dïÁ­;¤(docs/running_psalm/issues/TaintedHtml.mdg8&%dgœ¼c¤(docs/running_psalm/issues/InvalidCast.mdˆ8&%dˆ«ÞM¤,docs/running_psalm/issues/NullArrayOffset.md8&%dÇ%S¤3docs/running_psalm/issues/InvalidReturnStatement.md8&%dÚï¤,docs/running_psalm/issues/UndefinedMethod.mdm8&%dmÓëä^¤1docs/running_psalm/issues/InvalidTemplateParam.mdt8&%dt¢|K)¤?docs/running_psalm/issues/PossiblyUndefinedStringArrayOffset.md)8&%d)V0¤)docs/running_psalm/issues/InvalidThrow.md›8&%d›)‚’Ô¤2docs/running_psalm/issues/PossiblyNullReference.mdÈ8&%dÈ9n(6¤.docs/running_psalm/issues/CircularReference.mdÄ8&%dćpÊæ¤+docs/running_psalm/issues/DuplicateParam.md½8&%d½» ¿ê¤4docs/running_psalm/issues/PossiblyNullArrayAccess.md¨8&%d¨ŸÙ=¤4docs/running_psalm/issues/PossiblyInvalidIterator.md¯8&%d¯è…D1¤8docs/running_psalm/issues/PossiblyNullArrayAssignment.md†8&%d†…¼Ǥ8docs/running_psalm/issues/LessSpecificReturnStatement.mdê8&%dêþ1¤0docs/running_psalm/issues/PossiblyUnusedParam.mdÜ8&%dܰ6åˤ'docs/running_psalm/issues/MixedClone.mdx8&%dx;É®¤@docs/running_psalm/issues/RedundantConditionGivenDocblockType.md{8&%d{ôätÞ¤7docs/running_psalm/issues/PossiblyInvalidArrayAccess.md»8&%d»cií,¤(docs/running_psalm/issues/NullOperand.mdƒ8&%dƒÚp$¤4docs/running_psalm/issues/UndefinedGlobalVariable.mdn8&%dns’þ¤9docs/running_psalm/issues/PossiblyInvalidPropertyFetch.mdY8&%dY¹Ï¾Ó¤.docs/running_psalm/issues/DuplicateFunction.mdœ8&%dœð«¤.docs/running_psalm/issues/NonStaticSelfCall.mdÒ8&%dÒÌ„Á™¤;docs/running_psalm/issues/InvalidConstantAssignmentValue.mdÒ8&%dÒö²Œ¤7docs/running_psalm/issues/MissingImmutableAnnotation.mdº8&%dº>Õ´z¤;docs/running_psalm/issues/PossiblyInvalidArrayAssignment.mdÄ8&%dÄæ½,¤8docs/running_psalm/issues/OverriddenInterfaceConstant.md8&%dµ‰N¿¤3docs/running_psalm/issues/PossiblyFalseReference.md8&%dW\]4¤.docs/running_psalm/issues/UnusedConstructor.md8&%d3n: ¤Cdocs/running_psalm/issues/PossiblyInvalidPropertyAssignmentValue.md58&%d5ÓôZ¤6docs/running_psalm/issues/PossiblyInvalidMethodCall.md8&%d~ ‹ú¤3docs/running_psalm/issues/DuplicateEnumCaseValue.mdR8&%dRºhqA¤3docs/running_psalm/issues/TypeDoesNotContainType.mdµ8&%dµm̵¤(docs/running_psalm/issues/TaintedFile.mdÚ8&%dÚ–‚Ȥ+docs/running_psalm/issues/UnusedVariable.md:8&%d:ÏbñŒ¤9docs/running_psalm/issues/AmbiguousConstantInheritance.md(8&%d( ;f ¤)docs/running_psalm/issues/NullIterator.md^8&%d^Vjå¤Adocs/running_psalm/issues/MethodSignatureMustProvideReturnType.mdü8&%dü¢&­¤3docs/running_psalm/issues/InvalidEnumBackingType.md¹8&%d¹ð°8K¤.docs/running_psalm/issues/DuplicateConstant.md8&%dêüàB¤;docs/running_psalm/issues/ConflictingReferenceConstraint.md8&%dÅ þ-¤)docs/running_psalm/issues/InvalidClass.mdb8&%dbn;®°¤-docs/running_psalm/issues/ImpureMethodCall.mdz8&%dzw1Âw¤)docs/running_psalm/issues/TaintedShell.mdã8&%dãÓðùQ¤4docs/running_psalm/issues/PossiblyInvalidArgument.md¿8&%d¿µŒ¤3docs/running_psalm/issues/PossiblyInvalidOperand.mdÓ8&%dÓÉL/ä¤6docs/running_psalm/issues/InvalidNullableReturnType.mdî8&%dî®DˆÅ¤3docs/running_psalm/issues/UnrecognizedExpression.md„8&%d„cB¤)docs/running_psalm/issues/InvalidClone.mdz8&%dzx&%ü¤*docs/running_psalm/issues/RedundantCast.md›8&%d› /1¤0docs/running_psalm/issues/PossiblyInvalidCast.mdó8&%dóÉS„¤*docs/running_psalm/issues/MixedArgument.mdŸ8&%dŸ¢fD¤3docs/running_psalm/issues/TypeDoesNotContainNull.md„8&%d„Ö:³^¤5docs/running_psalm/issues/InvalidClassConstantType.mdI8&%dI/ÊLŸ¤-docs/running_psalm/issues/MissingParamType.md8&%d_Î@d¤$docs/running_psalm/issues/NoValue.mdB8&%dBº ­I¤(docs/running_psalm/issues/ConfigIssue.md¹8&%d¹÷Äê¤/docs/running_psalm/issues/InvalidExtendClass.mdð8&%dð0'Rޤ-docs/running_psalm/issues/IfThisIsMismatch.md78&%d7ÖaÁ¤4docs/running_psalm/issues/NamedArgumentNotAllowed.md8&%dªó8Ѥ*docs/running_psalm/issues/ForbiddenCode.md¾8&%d¾ª(g¤2docs/running_psalm/issues/InvalidScalarArgument.md—8&%d—a ¤+docs/running_psalm/issues/UndefinedTrace.md¯8&%d¯Î%N ¤5docs/running_psalm/issues/UndefinedInterfaceMethod.md§8&%d§6ØÜ¬¤8docs/running_psalm/issues/MixedStringOffsetAssignment.md­8&%d­ˆ¸‡†¤4docs/running_psalm/issues/UnhandledMatchCondition.mdW8&%dW®¤š9¤3docs/running_psalm/issues/LessSpecificReturnType.md£8&%d£L6e¤,docs/running_psalm/issues/DuplicateMethod.md“8&%d“)…£¤5docs/running_psalm/issues/InvalidDocblockParamName.md 8&%d $Œ\û¤6docs/running_psalm/issues/PossiblyNullPropertyFetch.mdØ8&%dØ‹u׍0docs/running_psalm/issues/MissingDocblockType.md‘8&%d‘Ofã¤0docs/running_psalm/issues/DeprecatedInterface.mdA8&%dA³7U–¤(docs/running_psalm/issues/UnusedParam.mdp8&%dpŠüÕñ¤0docs/running_psalm/issues/UnusedPsalmSuppress.mdç8&%dç´W¤0¤;docs/running_psalm/issues/InvalidPropertyAssignmentValue.mdí8&%díÎX3¤Adocs/running_psalm/issues/PossiblyFalsePropertyAssignmentValue.md38&%d3³fí¤.docs/running_psalm/issues/InvalidEnumMethod.md8&%dþŇѤ)docs/running_psalm/issues/ReservedWord.md|8&%d|ì>¼¤/docs/running_psalm/issues/DeprecatedProperty.md8&%dG`¤1docs/running_psalm/issues/InvalidEnumCaseValue.mdY8&%dYxwÁ¤1docs/running_psalm/issues/ParadoxicalCondition.md8&%d°ÆX¤/docs/running_psalm/issues/DeprecatedFunction.md28&%d2/%B¨¤7docs/running_psalm/issues/UndefinedThisPropertyFetch.mdÞ8&%dÞGvýk¤/docs/running_psalm/issues/InaccessibleMethod.mdÏ8&%dÏ„ˆwb¤8docs/running_psalm/issues/ImpureByReferenceAssignment.md‰8&%d‰Ó¬F¡¤3docs/running_psalm/issues/MoreSpecificReturnType.mdM8&%dMÍÎ+&¤,docs/running_psalm/issues/DeprecatedClass.md"8&%d"¤2éC¤7docs/running_psalm/issues/UncaughtThrowInGlobalScope.mdË8&%dËÚ^ñ¬¤=docs/running_psalm/issues/MoreSpecificImplementedParamType.mdÒ8&%dÒY¤©t¤=docs/running_psalm/issues/NonInvariantDocblockPropertyType.mdÎ8&%dÎ À¤1docs/running_psalm/issues/MixedArrayAssignment.md«8&%d«;Šål¤-docs/running_psalm/issues/AssignmentToVoid.md8&%dÖÈPɤ0docs/running_psalm/issues/InvalidParamDefault.md¯8&%d¯ù¬}¤4docs/running_psalm/issues/UndefinedAttributeClass.md—8&%d—]2¬¤3docs/running_psalm/issues/PossiblyUnusedProperty.mdŒ8&%dŒ³y¹˜¤*docs/running_psalm/issues/ComplexMethod.mdc8&%dcïX“¤6docs/running_psalm/issues/RedundantIdentityWithTrue.md98&%d9qÚ`ð¤.docs/running_psalm/issues/UnusedReturnValue.md48&%d43YÛ¤/docs/running_psalm/issues/AbstractMethodCall.mdó8&%dóW¯8Τ&docs/running_psalm/issues/RiskyCast.md38&%d3;àãî¤*docs/running_psalm/issues/InternalClass.md‘8&%d‘±á‹‚¤.docs/running_psalm/issues/UndefinedConstant.mdn8&%dn‹×y}¤.docs/running_psalm/issues/InvalidReturnType.mdñ8&%dñ÷ȸ6¤4docs/running_psalm/issues/MissingClosureParamType.md«8&%d«Ø"&f¤-docs/running_psalm/issues/NoEnumProperties.md³8&%d³0l‹Ñ¤,docs/running_psalm/issues/TaintedCallable.md48&%d4’9Qפ;docs/running_psalm/issues/RedundantCastGivenDocblockType.mdã8&%dã$”6v¤;docs/running_psalm/issues/PossiblyNullPropertyAssignment.mdá8&%dáœÎA¶¤9docs/running_psalm/issues/PossiblyUndefinedArrayOffset.mdM8&%dMÖš]l¤+docs/running_psalm/issues/TaintedInclude.md„8&%d„#‘‹®¤4docs/running_psalm/issues/NullableReturnStatement.md8&%dÑ À¤/docs/running_psalm/issues/RedundantCondition.md¸8&%d¸ÔaIà¤*docs/running_psalm/issues/TaintedHeader.md8&%d ‘§&¤6docs/running_psalm/issues/MixedPropertyTypeCoercion.md28&%d2›¦9A¤1docs/running_psalm/issues/PossiblyNullArgument.md«8&%d«;Y4¤8docs/running_psalm/issues/UndefinedPropertyAssignment.md´8&%d´uÈü¤-docs/running_psalm/issues/TooManyArguments.md¯8&%d¯4 žŒ¤,docs/running_psalm/issues/TooFewArguments.md¥8&%d¥&VºÚ¤-docs/running_psalm/issues/InternalProperty.mdß8&%dßy6½Q¤/docs/running_psalm/issues/RawObjectIteration.mdm8&%dm𒮤.docs/running_psalm/issues/MixedFunctionCall.md 8&%d $¹Êå¤0docs/running_psalm/issues/UnusedBaselineEntry.mdç8&%dçl_¾¤4docs/running_psalm/issues/FalsableReturnStatement.md¶8&%d¶Y›÷/¤.docs/running_psalm/issues/UndefinedVariable.md8&%d¥_†¤,docs/running_psalm/issues/NullArrayAccess.mdx8&%dx6Mx1¤7docs/running_psalm/issues/PossibleRawObjectIteration.md…8&%d…Ïe·¤(docs/running_psalm/issues/TaintedLdap.mdÿ8&%dÿ‚Öµ›¤1docs/running_psalm/issues/PossiblyUnusedMethod.mdb8&%db¨û`¤.docs/running_psalm/issues/MutableDependency.mdP8&%dPv¾¤6docs/running_psalm/issues/InvalidFalsableReturnType.mdï8&%d¥í¤/docs/running_psalm/issues/MissingConstructor.mdª8&%dªKÌXõ¤-docs/running_psalm/issues/EmptyArrayAccess.mdx8&%dxìœ-B¤=docs/running_psalm/issues/InvalidTraversableImplementation.md>8&%d>ÈiM¥¤,docs/running_psalm/issues/StringIncrement.mdª8&%dªò›£$¤0docs/running_psalm/issues/InvalidFunctionCall.mdx8&%dxѶšs¤"docs/running_psalm/issues/Trace.md¾8&%d¾õÝx¤:docs/running_psalm/issues/LessSpecificClassConstantType.mdK8&%dKi7a^¤'docs/running_psalm/issues/TaintedSql.mdy8&%dy“ƒ¤4docs/running_psalm/issues/OverriddenFinalConstant.md8&%d©ÎŒv¤?docs/running_psalm/issues/ImplementationRequirementViolation.md½8&%d½¢ï°Õ¤6docs/running_psalm/issues/DocblockTypeContradiction.mdy8&%dyï¬\¤6docs/running_psalm/issues/MixedArgumentTypeCoercion.md&8&%d&>@Ý#¤*docs/running_psalm/issues/NullReference.mdm8&%dm´ß&¤'docs/running_psalm/issues/ParseError.md’8&%d’uAfФ,docs/running_psalm/issues/DeprecatedTrait.md08&%d0Xªz¤.docs/running_psalm/issues/NullPropertyFetch.md{8&%d{Á=]X¤<docs/running_psalm/issues/MismatchingDocblockPropertyType.mdÎ8&%dÎN’ó¤-docs/running_psalm/issues/MixedArrayAccess.md›8&%d›ÛRࣤ2docs/running_psalm/issues/UnrecognizedStatement.md†8&%d†ˆùCµ¤0docs/running_psalm/issues/ContinueOutsideLoop.mdÇ8&%dÇO9YÖ¤<docs/running_psalm/issues/UndefinedThisPropertyAssignment.mdç8&%dçGø_}¤1docs/running_psalm/issues/ImpureStaticProperty.md78&%d7›U7¤8docs/running_psalm/issues/UndefinedMagicPropertyFetch.md8&%d¢ìá¤+docs/running_psalm/issues/ParentNotFound.mdª8&%dªª«´¤.docs/running_psalm/issues/MissingDependency.md«8&%d«ìCŽë¤/docs/running_psalm/issues/ImpureFunctionCall.md@8&%d@ÞU¿¤Cdocs/running_psalm/issues/RedundantFunctionCallGivenDocblockType.mde8&%de(9î¤.docs/running_psalm/issues/DuplicateEnumCase.mdý8&%dýÿq¤/docs/running_psalm/issues/PrivateFinalMethod.mdÐ8&%dÐxÕñˆ¤<docs/running_psalm/issues/PossiblyUndefinedIntArrayOffset.md8&%dy¤¼7¤1docs/running_psalm/issues/UnresolvableConstant.mdè8&%dè0ÂÛ¤1docs/running_psalm/issues/InaccessibleProperty.mdØ8&%dØ&ûؤ4docs/running_psalm/issues/PossiblyNullArrayOffset.md¹8&%d¹1„¤;docs/running_psalm/issues/InvalidInterfaceImplementation.md8&%di;Râ¤:docs/running_psalm/issues/ImplementedReturnTypeMismatch.md–8&%d–ÆÉO¤9docs/running_psalm/issues/MismatchingDocblockParamType.mdÊ8&%dÊÀX¹¤-docs/running_psalm/issues/MixedArrayOffset.md§8&%d§¨¯T”¤1docs/running_psalm/issues/MixedReturnStatement.md¹8&%d¹D–m÷¤6docs/running_psalm/issues/UnsupportedReferenceUsage.mdæ8&%dæXd\>¤*docs/running_psalm/issues/TaintedCustom.mdh8&%dh%°¤/docs/running_psalm/issues/TaintedUnserialize.md8&%dcç¤3docs/running_psalm/issues/UndefinedDocblockClass.md¯8&%d¯Êàû^¤,docs/running_psalm/issues/InvalidToString.mdë8&%dëÛ±º¬¤1docs/running_psalm/issues/InvalidNamedArgument.md÷8&%d÷M¤0docs/running_psalm/issues/UnsafeInstantiation.md=8&%d=®ž­ ¤6docs/running_psalm/issues/PossiblyUndefinedVariable.mdÖ8&%dÖÑ –¤-docs/running_psalm/issues/NullFunctionCall.mds8&%ds“—êY¤.docs/running_psalm/issues/InvalidTypeImport.mdÞ8&%dÞº×K¤&docs/running_psalm/issues/CheckType.md{8&%d{¥WRo¤4docs/running_psalm/issues/InvalidStaticInvocation.mdí8&%díA¥ŽÄ¤5docs/running_psalm/issues/PossiblyNullFunctionCall.md¢8&%d¢R>å'¤>docs/running_psalm/issues/PossiblyInvalidPropertyAssignment.md`8&%d`b…–ݤ7docs/running_psalm/issues/UnsafeGenericInstantiation.md5 8&%d5 ZÇ‹>¤1docs/running_psalm/issues/MissingTemplateParam.mdù8&%dù:øóæ¤-docs/running_psalm/issues/LoopInvalidation.md¤8&%d¤í|¤³¤8docs/running_psalm/issues/PossiblyInvalidFunctionCall.md¾8&%d¾Jñj†¤0docs/running_psalm/issues/ImpurePropertyFetch.mdð8&%dðRöVð¤0docs/running_psalm/issues/TaintedSystemSecret.md8&%dGÊ@±¤)docs/running_psalm/issues/FalseOperand.mdÆ8&%dÆyò¤/docs/running_psalm/issues/InvalidArrayOffset.md¯8&%d¯yåyÚ¤9docs/running_psalm/issues/TraitMethodSignatureMismatch.md8&%d…‘,¤2docs/running_psalm/issues/TooManyTemplateParams.mdE8&%dELQºÚ¤9docs/running_psalm/issues/ConstructorSignatureMismatch.md³8&%d³ Ÿ®¤>docs/running_psalm/issues/LessSpecificImplementedReturnType.mdŠ8&%dŠ8(R¤phar-versions.phpÅ8&%dÅi[%c¤ */ public function getTypes(): array {} } /** * @psalm-immutable * * @template-covariant Start of string|DateTimeInterface * @implements IteratorAggregate */ class DatePeriod implements IteratorAggregate { const EXCLUDE_START_DATE = 1; const INCLUDE_END_DATE = 2; /** * @param Start $start * @param (Start is string ? int-mask : DateInterval) $interval * @param (Start is string ? never : (DateTimeInterface|positive-int)) $end * @param (Start is string ? never : int-mask) $options */ public function __construct($start, $interval = 0, $end = 1, $options = 0) {} /** @psalm-return (Start is string ? Iterator : Iterator) */ public function getIterator(): Iterator {} } #[Attribute(Attribute::TARGET_PARAMETER)] final class SensitiveParameter { public function __construct() {} } #[Attribute(Attribute::TARGET_CLASS)] final class AllowDynamicProperties { public function __construct() {} } /** * @psalm-pure * @param positive-int $length * @return list * * @psalm-flow ($string) -> return */ function str_split(string $string, int $length = 1) {} } */ public function getTarget() : int { } /** @psalm-pure */ public function isRepeated() : bool { } public function getArguments() : array { } /** * @return TClass */ public function newInstance() : object { } /** * @return never-return */ private function __clone() { } } /** * @template-covariant T as object * * @property-read class-string $name */ class ReflectionClass implements Reflector { /** * @return non-empty-string|false * @psalm-pure */ public function getFileName(): string|false {} /** * @return positive-int|false * @psalm-pure */ public function getStartLine(): int|false {} /** * @return positive-int|false * @psalm-pure */ public function getEndLine(): int|false {} /** * @return non-empty-string|false * @psalm-pure */ public function getDocComment(): string|false {} /** * @template J as object * @param self|class-string $class * @psalm-assert-if-true self $this * @psalm-pure */ public function isSubclassOf(self|string $class): bool {} /** * @template J as object * @param self|interface-string $interface * @psalm-assert-if-true self $this * @psalm-pure */ public function implementsInterface(self|string $interface): bool {} /** * @return non-empty-string|false * * @psalm-pure */ public function getExtensionName(): string|false {} /** * @param list|array $args * * @return T */ public function newInstanceArgs(array $args): object {} } /** @psalm-immutable */ class ReflectionClassConstant { public const IS_PUBLIC = 1; public const IS_PROTECTED = 2; public const IS_PRIVATE = 4; /** @return non-empty-string|false */ public function getDocComment(): string|false {} } abstract class ReflectionFunctionAbstract implements Reflector { /** * @return non-empty-string|false * * @psalm-pure */ public function getDocComment(): string|false {} /** * @return positive-int|false * * @psalm-pure */ public function getStartLine(): int|false {} /** * @return positive-int|false * * @psalm-pure */ public function getEndLine(): int|false {} /** * @return non-empty-string|false * * @psalm-pure */ public function getFileName(): string|false {} /** * @return non-empty-string|false * * @psalm-pure */ public function getExtensionName(): string|false {} } /** @psalm-immutable */ class Attribute { public int $flags; public const TARGET_CLASS = 1; public const TARGET_FUNCTION = 2; public const TARGET_METHOD = 4; public const TARGET_PROPERTY = 8; public const TARGET_CLASS_CONSTANT = 16; public const TARGET_PARAMETER = 32; public const TARGET_ALL = 63; public const IS_REPEATABLE = 64; /** * @param int-mask-of $flags */ public function __construct(int $flags = self::TARGET_ALL) { } } class ReflectionProperty implements Reflector { /** * @return non-empty-string|false * * @psalm-pure */ public function getDocComment(): string|false {} } /** @psalm-immutable */ class ReflectionUnionType extends ReflectionType { /** @return non-empty-list */ public function getTypes(): array {} } class UnhandledMatchError extends Error {} /** * @psalm-immutable * * @template-covariant Start of string|DateTimeInterface * @implements IteratorAggregate */ class DatePeriod implements IteratorAggregate { const EXCLUDE_START_DATE = 1; /** * @param Start $start * @param (Start is string ? 0|self::EXCLUDE_START_DATE : DateInterval) $interval * @param (Start is string ? never : (DateTimeInterface|positive-int)) $end * @param (Start is string ? never : 0|self::EXCLUDE_START_DATE) $options */ public function __construct($start, $interval = 0, $end = 1, $options = 0) {} /** @psalm-return (Start is string ? Iterator : Iterator) */ public function getIterator(): Iterator {} } /** * @psalm-pure * * @param resource|null $context * * @return ($associative is false|0 ? list : array>)|false * * @psalm-taint-sink ssrf $url */ function get_headers(string $url, bool $associative = false, $context = null) : array|false {} /** * @psalm-pure * * @psalm-flow ($values) -> return */ function pack(string $format, mixed ...$values): string {} final class CurlHandle { private function __construct() { } } final class CurlMultiHandle { private function __construct() { } } final class CurlShareHandle { private function __construct() { } } * URI of the WSDL file or NULL if working in * non-WSDL mode. *

*

* During development, WSDL caching may be disabled by the * use of the soap.wsdl_cache_ttl php.ini setting * otherwise changes made to the WSDL file will have no effect until * soap.wsdl_cache_ttl is expired. *

* @param array $options [optional]

* An array of options. If working in WSDL mode, this parameter is optional. * If working in non-WSDL mode, the location and * uri options must be set, where location * is the URL of the SOAP server to send the request to, and uri * is the target namespace of the SOAP service. *

*

* The style and use options only work in * non-WSDL mode. In WSDL mode, they come from the WSDL file. *

*

* The soap_version option should be one of either * SOAP_1_1 or SOAP_1_2 to * select SOAP 1.1 or 1.2, respectively. If omitted, 1.1 is used. *

*

* For HTTP authentication, the login and * password options can be used to supply credentials. * For making an HTTP connection through * a proxy server, the options proxy_host, * proxy_port, proxy_login * and proxy_password are also available. * For HTTPS client certificate authentication use * local_cert and passphrase options. An * authentication may be supplied in the authentication * option. The authentication method may be either * SOAP_AUTHENTICATION_BASIC (default) or * SOAP_AUTHENTICATION_DIGEST. *

*

* The compression option allows to use compression * of HTTP SOAP requests and responses. *

*

* The encoding option defines internal character * encoding. This option does not change the encoding of SOAP requests (it is * always utf-8), but converts strings into it. *

*

* The trace option enables tracing of request so faults * can be backtraced. This defaults to FALSE *

*

* The classmap option can be used to map some WSDL * types to PHP classes. This option must be an array with WSDL types * as keys and names of PHP classes as values. *

*

* Setting the boolean trace option enables use of the * methods * SoapClient->__getLastRequest, * SoapClient->__getLastRequestHeaders, * SoapClient->__getLastResponse and * SoapClient->__getLastResponseHeaders. *

*

* The exceptions option is a boolean value defining whether * soap errors throw exceptions of type * SoapFault. *

*

* The connection_timeout option defines a timeout in seconds * for the connection to the SOAP service. This option does not define a timeout * for services with slow responses. To limit the time to wait for calls to finish the * default_socket_timeout setting * is available. *

*

* The typemap option is an array of type mappings. * Type mapping is an array with keys type_name, * type_ns (namespace URI), from_xml * (callback accepting one string parameter) and to_xml * (callback accepting one object parameter). *

*

* The cache_wsdl option is one of * WSDL_CACHE_NONE, * WSDL_CACHE_DISK, * WSDL_CACHE_MEMORY or * WSDL_CACHE_BOTH. *

*

* The user_agent option specifies string to use in * User-Agent header. *

*

* The stream_context option is a resource * for context. *

*

* The features option is a bitmask of * SOAP_SINGLE_ELEMENT_ARRAYS, * SOAP_USE_XSI_ARRAY_TYPE, * SOAP_WAIT_ONE_WAY_CALLS. *

*

* The keep_alive option is a boolean value defining whether * to send the Connection: Keep-Alive header or * Connection: close. *

*

* The ssl_method option is one of * SOAP_SSL_METHOD_TLS, * SOAP_SSL_METHOD_SSLv2, * SOAP_SSL_METHOD_SSLv3 or * SOAP_SSL_METHOD_SSLv23. *

* @throws SoapFault A SoapFault exception will be thrown if the wsdl URI cannot be loaded. * @since 5.0.1 */ public function __construct ($wsdl, array $options = null) {} /** * Calls a SOAP function (deprecated) * @link https://php.net/manual/en/soapclient.call.php * @param string $function_name * @param array $arguments * @return mixed * @since 5.0.1 */ public function __call ($function_name, $arguments) {} /** * Calls a SOAP function * @link https://php.net/manual/en/soapclient.soapcall.php * @param string $function_name

* The name of the SOAP function to call. *

* @param array $arguments

* An array of the arguments to pass to the function. This can be either * an ordered or an associative array. Note that most SOAP servers require * parameter names to be provided, in which case this must be an * associative array. *

* @param array $options [optional]

* An associative array of options to pass to the client. *

*

* The location option is the URL of the remote Web service. *

*

* The uri option is the target namespace of the SOAP service. *

*

* The soapaction option is the action to call. *

* @param mixed $input_headers [optional]

* An array of headers to be sent along with the SOAP request. *

* @param array $output_headers [optional]

* If supplied, this array will be filled with the headers from the SOAP response. *

* @return mixed SOAP functions may return one, or multiple values. If only one value is returned * by the SOAP function, the return value of __soapCall will be * a simple value (e.g. an integer, a string, etc). If multiple values are * returned, __soapCall will return * an associative array of named output parameters. *

*

* On error, if the SoapClient object was constructed with the exceptions * option set to FALSE, a SoapFault object will be returned. * @since 5.0.1 */ public function __soapCall (string $function_name, array $arguments, array $options = null, $input_headers = null, &$output_headers = null) {} /** * Returns last SOAP request * @link https://php.net/manual/en/soapclient.getlastrequest.php * @return string|null The last SOAP request, as an XML string. * @since 5.0.1 */ public function __getLastRequest () {} /** * Returns last SOAP response * @link https://php.net/manual/en/soapclient.getlastresponse.php * @return string|null The last SOAP response, as an XML string. * @since 5.0.1 */ public function __getLastResponse () {} /** * Returns the SOAP headers from the last request * @link https://php.net/manual/en/soapclient.getlastrequestheaders.php * @return string|null The last SOAP request headers. * @since 5.0.1 */ public function __getLastRequestHeaders () {} /** * Returns the SOAP headers from the last response * @link https://php.net/manual/en/soapclient.getlastresponseheaders.php * @return string|null The last SOAP response headers. * @since 5.0.1 */ public function __getLastResponseHeaders () {} /** * Returns list of available SOAP functions * @link https://php.net/manual/en/soapclient.getfunctions.php * @return array|null The array of SOAP function prototypes, detailing the return type, * the function name and type-hinted parameters. * @since 5.0.1 */ public function __getFunctions () {} /** * Returns a list of SOAP types * @link https://php.net/manual/en/soapclient.gettypes.php * @return array|null The array of SOAP types, detailing all structures and types. * @since 5.0.1 */ public function __getTypes () {} /** * Returns a list of all cookies * @link https://php.net/manual/en/soapclient.getcookies.php * @return array The array of all cookies * @since 5.4.3 */ public function __getCookies () {} /** * The __setCookie purpose * @link https://php.net/manual/en/soapclient.setcookie.php * @param string $name

* The name of the cookie. *

* @param string $value [optional]

* The value of the cookie. If not specified, the cookie will be deleted. *

* @return void No value is returned. * @since 5.0.4 */ public function __setCookie ($name, $value = null) {} /** * Sets the location of the Web service to use * @link https://php.net/manual/en/soapclient.setlocation.php * @param string $new_location [optional]

* The new endpoint URL. *

* @return string The old endpoint URL. * @since 5.0.1 */ public function __setLocation ($new_location = null) {} /** * Sets SOAP headers for subsequent calls * @link https://php.net/manual/en/soapclient.setsoapheaders.php * @param mixed $soapheaders [optional]

* The headers to be set. It could be SoapHeader * object or array of SoapHeader objects. * If not specified or set to NULL, the headers will be deleted. *

* @return bool TRUE on success or FALSE on failure. * @since 5.0.5 */ public function __setSoapHeaders ($soapheaders = null) {} } class SoapFault extends Exception { /** * @param array|string|null $code */ public function __construct( $code, string $string, ?string $actor = null, mixed $details = null, ?string $name = null, mixed $headerFault = null ) {} } class SoapHeader { public function __construct( string $namespace, string $name, // Actually doesn't have a default, not specifying results in no SoapHeader::$data property. Specifying null // results in a SoapHeader::$data property with null as the value. This probably makes no difference. mixed $data = null, bool $mustUnderstand = false, // Same as $data, no default. The documentation specifies this as a `string` but it accepts null. ?string $actor = null ) {} } |null|string $search * @param int $format * @param int $chunk_size * @param int $list * * @return void */ public function __construct($search, $format = APC_ITER_ALL, $chunk_size = 100, $list = APC_LIST_ACTIVE) { } /** * @return void */ public function rewind() { } /** * @return void */ public function next() { } /** * @return bool */ public function valid() { } /** * @return string */ public function key() { } /** * @return mixed */ public function current() { } /** * @return int */ public function getTotalHits() { } /** * @return int */ public function getTotalSize() { } /** * @return int */ public function getTotalCount() { } } 1 ? bool : (0|1)) */ function db2_autocommit($connection, int $value = null): int|bool {} |Redis */ public function mget(array $keys) {} public function migrate(string $host, int $port, string $key, string $dst, int $timeout, bool $copy = false, bool $replace = false): bool {} public function move(string $key, int $index): bool {} /** * @param array */ public function mset($key_values): Redis|bool {} /** * @param array */ public function msetnx($key_values): Redis|bool {} public function multi(int $value = Redis::MULTI): bool|Redis {} public function object(string $subcommand, string $key): Redis|int|string|false {} /** * @deprecated * @alias Redis::connect */ public function open(string $host, int $port = 6379, float $timeout = 0, string $persistent_id = NULL, int $retry_interval = 0, float $read_timeout = 0, array $context = NULL): bool {} public function pconnect(string $host, int $port = 6379, float $timeout = 0, string $persistent_id = NULL, int $retry_interval = 0, float $read_timeout = 0, array $context = NULL): bool {} public function persist(string $key): bool {} public function pexpire(string $key, int $timeout): bool {} public function pexpireAt(string $key, int $timestamp): bool {} public function pfadd(string $key, array $elements): int {} public function pfcount(string $key): int {} public function pfmerge(string $dst, array $keys): bool {} /** @return false|string|Redis */ public function ping(string $key = NULL) {} public function pipeline(): bool|Redis {} /** * @deprecated * @alias Redis::pconnect */ public function popen(string $host, int $port = 6379, float $timeout = 0, string $persistent_id = NULL, int $retry_interval = 0, float $read_timeout = 0, array $context = NULL): bool {} /** @return bool|Redis */ public function psetex(string $key, int $expire, string $value) {} public function psubscribe(array $patterns): void {} public function pttl(string $key): Redis|int|false {} public function publish(string $channel, string $message): mixed {} public function pubsub(string $command, mixed $arg = null): mixed {} public function punsubscribe(array $patterns): array|false {} /** @return false|string|Redis */ public function rPop(string $key) {} /** @return false|string|Redis */ public function randomKey() {} public function rawcommand(string $command, mixed ...$args): mixed {} /** @return bool|Redis */ public function rename(string $key_src, string $key_dst) {} /** @return bool|Redis */ public function renameNx(string $key_src, string $key_dst) {} public function restore(string $key, int $timeout, string $value): bool {} public function role(): mixed {} public function rpoplpush(string $src, string $dst): Redis|string|false {} public function sAdd(string $key, string $value, mixed ...$other_values): Redis|int|false {} public function sAddArray(string $key, array $values): int {} public function sDiff(string $key, string ...$other_keys): Redis|array|false {} public function sDiffStore(string $dst, string $key, string ...$other_keys): Redis|int|false {} public function sInter(array|string $key, string ...$other_keys): Redis|array|false {} public function sInterStore(array|string $key, string ...$other_keys): Redis|int|false {} public function sMembers(string $key): Redis|array|false {} public function sMisMember(string $key, string $member, string ...$other_members): array|false {} public function sMove(string $src, string $dst, string $value): Redis|bool {} public function sPop(string $key, int $count = 0): Redis|string|array|false {} public function sRandMember(string $key, int $count = 0): Redis|string|array|false {} public function sUnion(string $key, string ...$other_keys): Redis|array|false {} public function sUnionStore(string $dst, string $key, string ...$other_keys): Redis|int|false {} public function save(): bool {} public function scan(?int &$iterator, ?string $pattern = null, int $count = 0, string $type = NULL): array|false {} public function scard(string $key): Redis|int|false {} public function script(string $command, mixed ...$args): mixed {} public function select(int $db): bool {} /** @return bool|Redis */ public function set(string $key, string $value, mixed $opt = NULL) {} /** @return false|int|Redis */ public function setBit(string $key, int $idx, bool $value) {} /** @return false|int|Redis */ public function setRange(string $key, int $start, string $value) {} public function setOption(int $option, mixed $value): bool {} /** @return bool|Redis */ public function setex(string $key, int $expire, string $value) {} /** @return bool|array|Redis */ public function setnx(string $key, string $value) {} public function sismember(string $key, string $value): Redis|bool {} public function slaveof(string $host = null, int $port = 6379): bool {} public function slowlog(string $mode, int $option = 0): mixed {} public function sort(string $key, array $options = null): mixed {} /** * @deprecated */ public function sortAsc(string $key, ?string $pattern = null, mixed $get = null, int $offset = -1, int $count = -1, ?string $store = null): array {} /** * @deprecated */ public function sortAscAlpha(string $key, ?string $pattern = null, mixed $get = null, int $offset = -1, int $count = -1, ?string $store = null): array {} /** * @deprecated */ public function sortDesc(string $key, ?string $pattern = null, mixed $get = null, int $offset = -1, int $count = -1, ?string $store = null): array {} /** * @deprecated */ public function sortDescAlpha(string $key, ?string $pattern = null, mixed $get = null, int $offset = -1, int $count = -1, ?string $store = null): array {} public function srem(string $key, string $value, mixed ...$other_values): Redis|int|false {} public function sscan(string $key, int &$iterator, ?string $pattern = null, int $count = 0): array|false {} /** @return false|int|Redis */ public function strlen(string $key) {} public function subscribe(string $channel, string ...$other_channels): array|false {} public function swapdb(string $src, string $dst): bool {} public function time(): array|false {} public function ttl(string $key): Redis|int|false {} /** @return false|int|Redis */ public function type(string $key) {} /** * @return false|int|Redis */ public function unlink(array|string $key, string ...$other_keys) {} public function unsubscribe(string $channel, string ...$other_channels): array|false {} /** @return bool|Redis */ public function unwatch() {} /** * @return bool|Redis */ public function watch(array|string $key, string ...$other_keys) {} public function wait(int $count, int $timeout): int|false {} public function xack(string $key, string $group, array $ids): int|false {} public function xadd(string $key, string $id, array $values, int $maxlen = 0, bool $approx = false): string|false {} public function xclaim(string $key, string $group, string $consumer, int $min_iddle, array $ids, array $options): string|array|false {} public function xdel(string $key, array $ids): Redis|int|false {} public function xgroup(string $operation, string $key = null, string $arg1 = null, string $arg2 = null, bool $arg3 = false): mixed {} public function xinfo(string $operation, ?string $arg1 = null, ?string $arg2 = null, int $count = -1): mixed {} public function xlen(string $key): int {} public function xpending(string $key, string $group, string $start = null, string $end = null, int $count = -1, string $consumer = null): Redis|array|false {} public function xrange(string $key, string $start, string $end, int $count = -1): bool|array {} public function xread(array $streams, int $count = -1, int $block = -1): bool|array {} public function xreadgroup(string $group, string $consumer, array $streams, int $count = 1, int $block = 1): bool|array {} public function xrevrange(string $key, string $start, string $end, int $count = -1): bool|array {} public function xtrim(string $key, int $maxlen, bool $approx = false): int {} public function zAdd(string $key, array|float $score_or_options, mixed ...$more_scores_and_mems): Redis|int|false {} public function zCard(string $key): Redis|int|false {} public function zCount(string $key, string $start , string $end): Redis|int|false {} public function zIncrBy(string $key, float $value, mixed $member): Redis|float|false {} public function zLexCount(string $key, string $min, string $max): Redis|int|false {} public function zMscore(string $key, string $member, string ...$other_members): array|false {} public function zPopMax(string $key, int $value = null): array|false {} public function zPopMin(string $key, int $value = null): array|false {} public function zRange(string $key, int $start, int $end, mixed $scores = null): Redis|array|false {} public function zRangeByLex(string $key, string $min, string $max, int $offset = -1, int $count = -1): array|false {} public function zRangeByScore(string $key, string $start, string $end, array $options = []): Redis|array|false {} public function zRandMember(string $key, array $options = null): string|array|false {} public function zRank(string $key, mixed $member): Redis|int|false {} public function zRem(mixed $key, mixed $member, mixed ...$other_members): Redis|int|false {} public function zRemRangeByLex(string $key, string $min, string $max): int|false {} public function zRemRangeByRank(string $key, int $start, int $end): Redis|int|false {} public function zRemRangeByScore(string $key, string $start, string $end): Redis|int|false {} public function zRevRange(string $key, int $start, int $end, mixed $scores = null): Redis|array|false {} public function zRevRangeByLex(string $key, string $min, string $max, int $offset = -1, int $count = -1): array|false {} public function zRevRangeByScore(string $key, string $start, string $end, array $options = []): array|false {} public function zRevRank(string $key, mixed $member): Redis|int|false {} public function zScore(string $key, mixed $member): Redis|float|false {} public function zdiff(array $keys, array $options = null): array|false {} public function zdiffstore(string $dst, array $keys, array $options = null): int {} public function zinter(array $keys, ?array $weights = null, ?array $options = null): Redis|array|false {} public function zinterstore(string $dst, array $keys, ?array $weights = null, ?string $aggregate = null): Redis|int|false {} public function zscan(string $key, ?int &$iterator, ?string $pattern = null, int $count = 0): bool|array {} public function zunion(array $keys, ?array $weights = null, ?array $options = null): Redis|array|false {} public function zunionstore(string $dst, array $keys, ?array $weights = NULL, ?string $aggregate = NULL): Redis|int|false {} } |numeric-string */ public int|string $affected_rows; } /** * @template TValue * * @template-implements Traversable */ class mysqli_result implements Traversable { /** * @var int<0, max>|numeric-string */ public int|string $num_rows; /** * @psalm-taint-sink callable $class * * @template T of object * @param class-string $class * @param array $constructor_args * @return T|null|false */ function fetch_object(string $class = stdClass::class, array $constructor_args = []): object|false|null {} } class mysqli_stmt { /** * @var int<-1, max>|numeric-string */ public int|string $affected_rows; public int $errno; /** * @var list */ public $error_list; public string $error; /** * @var 0|positive-int */ public int $field_count; public int|string $insert_id; /** * @var int<0,max>|numeric-string */ public int|string $num_rows; /** * @var 0|positive-int */ public int $param_count; /** * @var non-empty-string */ public string $sqlstate; } /** * @psalm-taint-sink callable $class * * @template T of object * @template TValue * * @param mysqli_result $result * @param class-string $class * @param array $constructor_args * @return T|null|false */ function mysqli_fetch_object(mysqli_result $result, string $class = stdClass::class, array $constructor_args = []): object|false|null {} */ interface CursorInterface extends Traversable { /** * @return array */ public function toArray(); } /** * @template-covariant TValue of array|object * * @template-implements Iterator * @template-implements CursorInterface */ final class Cursor implements CursorInterface, Iterator { /** * @return TValue */ public function current() {} /** * @return void */ public function next() {} /** * @return int */ public function key() {} /** * @return bool */ public function valid() {} /** * @return void */ public function rewind() {} /** * @return array */ public function toArray() {} } */ class PDOStatement implements Traversable { /** * @psalm-taint-sink callable $class * * @template T of object * @param class-string $class * @param array $ctorArgs * @return false|T */ public function fetchObject($class = \stdclass::class, array $ctorArgs = array()) {} } class PDOException extends RuntimeException { protected string $code; public ?array $errorInfo = null; } */ public DOMNodeList $childNodes; /** @readonly */ public ?DOMNode $firstChild; /** @readonly */ public ?DOMNode $lastChild; /** @readonly */ public ?DOMNode $previousSibling; /** @readonly */ public ?DOMNode $nextSibling; /** * @readonly * @var DOMNamedNodeMap|null */ public ?DOMNamedNodeMap $attributes; /** @readonly */ public ?DOMDocument $ownerDocument; /** @readonly */ public ?string $namespaceURI; public string $prefix; /** @readonly */ public ?string $localName; /** @readonly */ public ?string $baseURI; public string $textContent; /** * @return DOMNode|false * @psalm-ignore-falsable-return */ public function appendChild(DOMNode $node) {} /** * @return string|false * @psalm-ignore-falsable-return */ public function C14N(bool $exclusive = false, bool $withComments = false, ?array $xpath = null, ?array $nsPrefixes = null) {} /** * @return int|false * @psalm-ignore-falsable-return */ public function C14NFile(string $uri, bool $exclusive = false, bool $withComments = false, ?array $xpath = null, ?array $nsPrefixes = null) {} /** * @return DOMNode|false * @psalm-ignore-falsable-return */ public function cloneNode(bool $deep = false) {} public function getLineNo(): int {} public function getNodePath(): ?string {} public function hasAttributes(): bool {} public function hasChildNodes(): bool {} /** * @return DOMNode|false * @psalm-ignore-falsable-return */ public function insertBefore(DOMNode $node, ?DOMNode $child = null) {} public function isDefaultNamespace(string $namespace): bool {} public function isSameNode(DOMNode $otherNode): bool {} public function isSupported(string $feature, string $version): bool {} public function lookupNamespaceURI(?string $prefix): ?string {} public function lookupPrefix(string $namespace): ?string {} public function normalize(): void {} /** * @return DOMNode|false * @psalm-ignore-falsable-return */ public function removeChild(DOMNode $child) {} /** * @return DOMNode|false * @psalm-ignore-falsable-return */ public function replaceChild(DOMNode $node, DOMNode $child) {} } class DOMNameSpaceNode { /** @readonly */ public string $nodeName; /** @readonly */ public ?string $nodeValue; /** @readonly */ public int $nodeType; /** @readonly */ public string $prefix; /** @readonly */ public ?string $localName; /** @readonly */ public ?string $namespaceURI; /** @readonly */ public ?DOMDocument $ownerDocument; /** @readonly */ public ?DOMNode $parentNode; } class DOMDocumentFragment extends DOMNode implements DOMParentNode { /** @readonly */ public ?DOMElement $firstElementChild; /** @readonly */ public ?DOMElement $lastElementChild; /** @readonly */ public int $childElementCount; public function __construct() {} public function appendXML(string $data): bool {} /** * @param DOMNode|string ...$nodes * @php-from 8.0 */ public function append(...$nodes): void {} /** * @param DOMNode|string ...$nodes * @php-from 8.0 */ public function prepend(...$nodes): void {} } class DOMDocument extends DOMNode implements DOMParentNode { /** @readonly */ public ?DOMDocumentType $doctype; /** @readonly */ public DOMImplementation $implementation; /** @readonly */ public ?DOMElement $documentElement; /** * @deprecated * @readonly */ public ?string $actualEncoding; /** * @var ?string */ public $encoding; /** @readonly */ public ?string $xmlEncoding; /** * @var bool */ public $standalone; /** * @var bool */ public $xmlStandalone; /** * @var ?string */ public $version; /** * @var ?string */ public $xmlVersion; /** * @var bool */ public $strictErrorChecking; /** * @var ?string */ public $documentURI; /** * @var mixed * @readonly * @deprecated */ public $config; /** * @var bool */ public $formatOutput; /** * @var bool */ public $validateOnParse; /** * @var bool */ public $resolveExternals; /** * @var bool */ public $preserveWhiteSpace; /** * @var bool */ public $recover; /** * @var bool */ public $substituteEntities; /** @readonly */ public ?DOMElement $firstElementChild; /** @readonly */ public ?DOMElement $lastElementChild; /** @readonly */ public int $childElementCount; public function __construct(string $version = '1.0', string $encoding = '') {} /** * @return DOMAttr|false * @psalm-ignore-falsable-return */ public function createAttribute(string $localName) {} /** * @return DOMAttr|false * @psalm-ignore-falsable-return */ public function createAttributeNS(?string $namespace, string $qualifiedName) {} /** * @return DOMCdataSection|false * @psalm-ignore-falsable-return */ public function createCDATASection(string $data) {} /** * @return DOMComment|false * @psalm-ignore-falsable-return */ public function createComment(string $data) {} /** * @throws DOMException * @php-from 8.1 */ public function createComment(string $data): DOMComment {} /** * @return DOMDocumentFragment|false * @psalm-ignore-falsable-return */ public function createDocumentFragment() {} /** * @throws DOMException * @php-from 8.1 */ public function createDocumentFragment(): DOMDocumentFragment {} /** * @return DOMElement|false * @psalm-ignore-falsable-return */ public function createElement(string $localName, string $value = '') {} /** * @return DOMElement|false * @psalm-ignore-falsable-return */ public function createElementNS(?string $namespace, string $qualifiedName, string $value = '') {} /** * @return DOMEntityReference|false * @psalm-ignore-falsable-return */ public function createEntityReference(string $name) {} /** * @return DOMProcessingInstruction|false * @psalm-ignore-falsable-return */ public function createProcessingInstruction(string $target, string $data = '') {} /** * @return DOMText|false * @psalm-ignore-falsable-return */ public function createTextNode(string $data) {} /** * @throws DOMException * @php-from 8.1 */ public function createTextNode(string $data): DOMText {} public function getElementById(string $elementId): ?DOMElement {} /** @return DOMNodeList */ public function getElementsByTagName(string $qualifiedName): DOMNodeList {} /** @return DOMNodeList */ public function getElementsByTagNameNS(string $namespace, string $localName): DOMNodeList {} /** * @return DOMNodeList * @php-from 8.0.3 */ public function getElementsByTagNameNS(?string $namespace, string $localName): DOMNodeList {} /** * @return DOMNode|false * @psalm-ignore-falsable-return */ public function importNode(DOMNode $node, bool $deep = false) {} /** * @return DOMDocument|false * @psalm-ignore-falsable-return **/ public function load(string $filename, int $options = 0) {} /** * @return DOMDocument|false * @psalm-ignore-falsable-return */ public function loadXML(string $source, int $options = 0) {} public function normalizeDocument(): void {} public function registerNodeClass(string $baseClass, ?string $extendedClass): bool {} /** * @return int|false * @psalm-ignore-falsable-return */ public function save(string $filename, int $options = 0) {} /** @return DOMDocument|bool */ public function loadHTML(string $source, int $options = 0) {} /** @return DOMDocument|bool */ public function loadHTMLFile(string $filename, int $options = 0) {} /** * @return string|false * @psalm-ignore-falsable-return */ public function saveHTML(?DOMNode $node = null) {} /** * @return int|false * @psalm-ignore-falsable-return */ public function saveHTMLFile(string $filename) {} /** * @return string|false * @psalm-ignore-falsable-return */ public function saveXML(?DOMNode $node = null, int $options = 0) {} public function schemaValidate(string $filename, int $flags = 0): bool {} public function schemaValidateSource(string $source, int $flags = 0): bool {} public function relaxNGValidate(string $filename): bool {} public function relaxNGValidateSource(string $source): bool {} public function validate(): bool {} /** * @return int|false * @psalm-ignore-falsable-return */ public function xinclude(int $options = 0) {} /** * @return DOMNode|false * @psalm-ignore-falsable-return */ public function adoptNode(DOMNode $node) {} /** * @return DOMNode|string ...$nodes * @php-from 8.0 */ public function append(...$nodes) : void {} /** * @return DOMNode|string ...$nodes * @php-from 8.0 */ public function prepend(...$nodes) : void {} } /** * @template-covariant TNode as DOMNode * @template-implements Traversable */ class DOMNodeList implements Traversable { /** @readonly */ public int $length; /** * @return TNode|null * @psalm-ignore-nullable-return */ public function item(int $index) {} } /** * @template-covariant TNode as DOMNode * @template-implements Traversable * * @php-from 7.2 */ class DOMNodeList implements Traversable, Countable { /** @readonly */ public int $length; public function count(): int {} /** * @return TNode|null * @psalm-ignore-nullable-return */ public function item(int $index) {} } /** * @template-covariant TNode as DOMNode * @template-implements IteratorAggregate * * @php-from 8.0 */ class DOMNodeList implements IteratorAggregate, Countable { /** @readonly */ public int $length; public function count(): int {} /** @return Iterator */ public function getIterator() : Iterator {} /** * @return TNode|null * @psalm-ignore-nullable-return */ public function item(int $index) {} } /** * @template-covariant TNode as DOMNode * @template-implements Traversable */ class DOMNamedNodeMap implements Traversable, Countable { /** @readonly */ public int $length; /** @return TNode|null */ public function getNamedItem(string $qualifiedName): ?DOMNode {} /** @return TNode|null */ public function getNamedItemNS(?string $namespace, string $localName): ?DOMNode {} /** * @return TNode|null * @psalm-ignore-nullable-return */ public function item(int $index): ?DOMNode {} public function count(): int {} } /** * @template-covariant TNode as DOMNode * @template-implements IteratorAggregate * * @php-from 8.0 */ class DOMNamedNodeMap implements IteratorAggregate, Countable { /** @readonly */ public int $length; /** @return TNode|null */ public function getNamedItem(string $qualifiedName): ?DOMNode {} /** @return TNode|null */ public function getNamedItemNS(?string $namespace, string $localName): ?DOMNode {} /** * @return TNode|null * @psalm-ignore-nullable-return */ public function item(int $index): ?DOMNode {} public function count(): int {} /** @return Iterator */ public function getIterator() : Iterator {} } class DOMCharacterData extends DOMNode implements DOMChildNode { public string $data; /** @readonly */ public int $length; /** @readonly */ public ?DOMElement $previousElementSibling; /** @readonly */ public ?DOMElement $nextElementSibling; public function appendData(string $data): bool {} /** * @return string|false * @psalm-ignore-falsable-return */ public function substringData(int $offset, int $count) {} public function insertData(int $offset, string $data): bool {} public function deleteData(int $offset, int $count): bool {} public function replaceData(int $offset, int $count, string $data): bool {} /** * @param DOMNode|string ...$nodes * @php-from 8.0 */ public function replaceWith(...$nodes) : void {} /** @php-from 8.0 */ public function remove() : void {} /** * @param DOMNode|string ...$nodes * @php-from 8.0 */ public function before(...$nodes) : void {} /** * @param DOMNode|string ...$nodes * @php-from 8.0 */ public function after(...$nodes) : void {} } class DOMAttr extends DOMNode { /** @readonly */ public string $name; /** @readonly */ public bool $specified; public string $value; /** @readonly */ public ?DOMElement $ownerElement; /** @readonly */ public mixed $schemaTypeInfo; /** * Inherited from DOMNode, but always non-null * @readonly */ public string $localName; public function __construct(string $name, string $value = '') {} public function isId(): bool {} } class DOMElement extends DOMNode implements DOMParentNode, DOMChildNode { /** @readonly */ public string $tagName; /** @readonly */ public mixed $schemaTypeInfo; /** @readonly */ public ?DOMElement $firstElementChild; /** @readonly */ public ?DOMElement $lastElementChild; /** @readonly */ public int $childElementCount; /** @readonly */ public ?DOMElement $previousElementSibling; /** @readonly */ public ?DOMElement $nextElementSibling; /** * Inherited from DOMNode, but always non-null. * * @readonly * @var DOMNamedNodeMap */ public DOMNamedNodeMap $attributes; /** * Inherited from DOMNode, but always non-null * @readonly */ public string $localName; public function __construct(string $qualifiedName, ?string $value = null, string $namespace = '') {} public function getAttribute(string $qualifiedName): string {} public function getAttributeNS(?string $namespace, string $localName): string {} /** * @return DOMAttr|DOMNameSpaceNode|false * @psalm-ignore-falsable-return */ public function getAttributeNode(string $qualifiedName) {} /** * @return DOMAttr|DOMNameSpaceNode|false * @psalm-ignore-falsable-return */ public function getAttributeNodeNS(?string $namespace, string $localName) {} /** @return DOMNodeList */ public function getElementsByTagName(string $qualifiedName): DOMNodeList {} /** @return DOMNodeList */ public function getElementsByTagNameNS(string $namespace, string $localName): DOMNodeList {} /** * @return DOMNodeList * @php-from 8.0.3 */ public function getElementsByTagNameNS(?string $namespace, string $localName): DOMNodeList {} public function hasAttribute(string $qualifiedName): bool {} public function hasAttributeNS(?string $namespace, string $localName): bool {} public function removeAttribute(string $qualifiedName): bool {} public function removeAttributeNS(?string $namespace, string $localName): void {} /** * @return DOMAttr|false * @psalm-ignore-falsable-return */ public function removeAttributeNode(DOMAttr $attr) {} /** * @return DOMAttr|false * @psalm-ignore-falsable-return */ public function setAttribute(string $qualifiedName, string $value) {} public function setAttributeNS(?string $namespace, string $qualifiedName, string $value): void {} /** * @return DOMAttr|null|false * @psalm-ignore-falsable-return */ public function setAttributeNode(DOMAttr $attr) {} /** * @return DOMAttr|null|false * @psalm-ignore-falsable-return */ public function setAttributeNodeNS(DOMAttr $attr) {} public function setIdAttribute(string $qualifiedName, bool $isId): void {} public function setIdAttributeNS(string $namespace, string $qualifiedName, bool $isId): void {} public function setIdAttributeNode(DOMAttr $attr, bool $isId): void {} /** @php-from 8.0 */ public function remove() : void {} /** * @param DOMNode|string ...$nodes * @php-from 8.0 */ public function before(...$nodes) : void {} /** * @param DOMNode|string ...$nodes * @php-from 8.0 */ public function after(...$nodes) : void {} /** * @param DOMNode|string ...$nodes * @php-from 8.0 */ public function replaceWith(...$nodes) : void {} /** * @param DOMNode|string ...$nodes * @php-from 8.0 */ public function append(...$nodes) : void {} /** * @param DOMNode|string ...$nodes * @php-from 8.0 */ public function prepend(...$nodes) : void {} } class DOMText extends DOMCharacterData { /** @readonly */ public string $wholeText; public function __construct(string $data = '') {} public function isWhitespaceInElementContent(): bool {} /** * @alias DOMText::isWhitespaceInElementContent */ public function isElementContentWhitespace(): bool {} /** * @return DOMText|false * @psalm-ignore-falsable-return */ public function splitText(int $offset) {} } class DOMComment extends DOMCharacterData { public function __construct(string $data = '') {} } class DOMCdataSection extends DOMText { public function __construct(string $data) {} } class DOMDocumentType extends DOMNode { /** @readonly */ public string $name; /** @readonly */ public DOMNamedNodeMap $entities; /** @readonly */ public DOMNamedNodeMap $notations; /** @readonly */ public string $publicId; /** @readonly */ public string $systemId; /** @readonly */ public ?string $internalSubset; } class DOMNotation extends DOMNode { /** @readonly */ public string $publicId; /** @readonly */ public string $systemId; } class DOMEntity extends DOMNode { /** @readonly */ public ?string $publicId; /** @readonly */ public ?string $systemId; /** @readonly */ public ?string $notationName; /** * @readonly * @deprecated */ public ?string $actualEncoding; /** * @readonly * @deprecated */ public ?string $encoding; /** * @readonly * @deprecated */ public ?string $version; } class DOMEntityReference extends DOMNode { public function __construct(string $name) {} } class DOMProcessingInstruction extends DOMNode { /** @readonly */ public string $target; public string $data; public function __construct(string $name, string $value = '') {} } class DOMXPath { /** @readonly */ public DOMDocument $document; public bool $registerNodeNamespaces; public function __construct(DOMDocument $document, bool $registerNodeNS = true) {} public function evaluate(string $expression, ?DOMNode $contextNode = null, bool $registerNodeNS = true): mixed {} /** * @return DOMNodeList|false */ public function query(string $expression, ?DOMNode $contextNode = null, bool $registerNodeNS = true): mixed {} public function registerNamespace(string $prefix, string $namespace): bool {} public function registerPhpFunctions(string|array|null $restrict = null): void {} } $class_name * @return SimpleXMLElement|false */ function simplexml_load_file(string $filename, ?string $class_name = SimpleXMLElement::class, int $options = 0, string $namespace_or_prefix = '', bool $is_prefix = false) {} /** * @param class-string $class_name * @return SimpleXMLElement|false */ function simplexml_load_string(string $data, ?string $class_name = 'SimpleXMLElement', int $options = 0, string $namespace_or_prefix = '', bool $is_prefix = false) {} /** * @param class-string $class_name */ function simplexml_import_dom(DOMNode $node, ?string $class_name = 'SimpleXMLElement'): ?SimpleXMLElement {} /** * @param class-string $class_name * @php-from 8.1 */ function simplexml_import_dom(SimpleXMLElement|DOMNode $node, ?string $class_name = 'SimpleXMLElement'): ?SimpleXMLElement {} /** * @implements Traversable */ class SimpleXMLElement implements Traversable, Countable { /** @return array|null|false */ public function xpath(string $expression) {} public function registerXPathNamespace(string $prefix, string $namespace): bool {} /** @return ($filename is null ? string|false : bool) */ public function asXML(?string $filename = null) {} /** * @return ($filename is null ? string|false : bool) * @alias SimpleXMLElement::asXML */ public function saveXML(?string $filename = null) {} public function getNamespaces(bool $recursive = false): array {} /** @return array|false */ public function getDocNamespaces(bool $recursive = false, bool $fromRoot = true) {} public function children(?string $namespaceOrPrefix = null, bool $isPrefix = false): ?SimpleXMLElement {} public function attributes(?string $namespaceOrPrefix = null, bool $isPrefix = false): ?SimpleXMLElement {} final public function __construct(string $data, int $options = 0, bool $dataIsURL = false, string $namespaceOrPrefix = '', bool $isPrefix = false) {} public function addChild(string $qualifiedName, ?string $value = null, ?string $namespace = null): ?SimpleXMLElement {} public function addAttribute(string $qualifiedName, string $value, ?string $namespace = null): void {} public function getName(): string {} public function __toString(): string {} public function count(): int {} } /** * @implements RecursiveIterator */ class SimpleXMLIterator extends SimpleXMLElement implements RecursiveIterator, Countable { public function count(): int {} public function rewind(): void {} public function valid(): bool {} public function current(): SimpleXMLIterator {} public function key(): ?string {} public function next(): void {} public function hasChildren(): bool {} public function getChildren(): SimpleXMLIterator {} } /** * @implements RecursiveIterator * @php-from 8.0 */ class SimpleXMLElement implements Stringable, Countable, RecursiveIterator { public function count(): int {} public function rewind(): void {} public function valid(): bool {} public function current(): SimpleXMLElement {} public function key(): ?string {} public function next(): void {} public function hasChildren(): bool {} public function getChildren(): ?SimpleXMLElement {} } /** @php-from 8.0 */ class SimpleXMLIterator extends SimpleXMLElement { public function current(): SimpleXMLElement {} public function getChildren(): ?SimpleXMLElement {} } */ interface Collection extends Traversable, Countable, JsonSerializable { /** * @return Collection * @psalm-mutation-free */ public function copy(): Collection; /** * @return array * @psalm-mutation-free */ public function toArray(): array; /** * @psalm-mutation-free */ public function isEmpty(): bool; /** * @psalm-mutation-free */ public function count(): int; } /** * @template TValue * @implements Sequence */ final class Deque implements Sequence { /** * @param iterable $values */ public function __construct(iterable $values = []) { } /** * @return Deque * @psalm-mutation-free */ public function copy(): Deque { } /** * @return list * @psalm-mutation-free */ public function toArray(): array { } /** * @psalm-mutation-free */ public function isEmpty(): bool { } /** * @psalm-mutation-free */ public function count(): int { } /** * @psalm-mutation-free */ public function allocate(int $capacity): void { } /** * @psalm-mutation-free */ public function capacity(): int { } /** * @return float|int * @psalm-mutation-free */ public function sum() { } /** * @param TValue ...$values * @psalm-mutation-free */ public function contains(...$values): bool { } /** * @param (callable(TValue): bool)|null $callback * @return Deque * @psalm-mutation-free */ public function filter(callable $callback = null): Deque { } /** * @param TValue $value * @return int|false * @psalm-mutation-free */ public function find($value) { } /** * @return TValue * @throws \UnderflowException * @psalm-mutation-free */ public function first() { } /** * @return TValue * @throws \OutOfRangeException * @psalm-mutation-free */ public function get(int $index) { } /** * @psalm-mutation-free */ public function join(?string $glue = null): string { } /** * @return TValue * @throws \UnderflowException * @psalm-mutation-free */ public function last() { } /** * @template TNewValue * @param callable(TValue): TNewValue $callback * @return Deque * @psalm-mutation-free */ public function map(callable $callback): Deque { } /** * @template TValue2 * @param iterable $values * @return Deque * @psalm-mutation-free */ public function merge(iterable $values): Deque { } /** * @return TValue * @throws \UnderflowException */ public function pop() { } /** * @template TCarry * @param callable(TCarry, TValue): TCarry $callback * @param TCarry $initial * @return TCarry * @psalm-mutation-free */ public function reduce(callable $callback, $initial = null) { } /** * @return TValue * @throws \OutOfRangeException */ public function remove(int $index) { } /** * @return Deque * @psalm-mutation-free */ public function reversed(): Deque { } /** * @return TValue * @throws \UnderflowException */ public function shift() { } /** * @return Deque * @psalm-mutation-free */ public function slice(int $offset, ?int $length = null): Deque { } /** * @param (callable(TValue, TValue): int)|null $comparator * @return Deque * @psalm-mutation-free */ public function sorted(callable $comparator = null): Deque { } } /** * @template TKey * @template TValue * @implements Collection * @implements ArrayAccess */ final class Map implements Collection, ArrayAccess { /** * @param iterable $values */ public function __construct(iterable $values = []) { } /** * @psalm-mutation-free */ public function allocate(int $capacity): void { } /** * @psalm-mutation-free */ public function capacity(): int { } /** * @return Map * @psalm-mutation-free */ public function copy(): Map { } /** * @return array * @psalm-mutation-free */ public function toArray(): array { } /** * @psalm-mutation-free */ public function isEmpty(): bool { } /** * @psalm-mutation-free */ public function count(): int { } /** * @param callable(TKey, TValue): TValue $callback */ public function apply(callable $callback): void { } /** * @return Pair * @throws UnderflowException * @psalm-mutation-free */ public function first(): Pair { } /** * @return Pair * @throws UnderflowException * @psalm-mutation-free */ public function last(): Pair { } /** * @return Pair * @throws OutOfRangeException * @psalm-mutation-free */ public function skip(int $position): Pair { } /** * @template TKey2 * @template TValue2 * @param iterable $values * @return Map * @psalm-mutation-free */ public function merge(iterable $values): Map { } /** * @template TKey2 * @template TValue2 * @param Map $map * @return Map * @psalm-mutation-free */ public function intersect(Map $map): Map { } /** * @template TValue2 * @param Map $map * @return Map * @psalm-mutation-free */ public function diff(Map $map): Map { } /** * @param TKey $key * @psalm-mutation-free */ public function hasKey($key): bool { } /** * @param TValue $value * @psalm-mutation-free */ public function hasValue($value): bool { } /** * @param (callable(TKey, TValue): bool)|null $callback * @return Map * @psalm-mutation-free */ public function filter(callable $callback = null): Map { } /** * @template TDefault * @param TKey $key * @param TDefault $default * @return ( * func_num_args() is 1 * ? TValue * : TValue|TDefault * ) * @throws OutOfBoundsException * @psalm-mutation-free */ public function get($key, $default = null) { } /** * @return Set * @psalm-mutation-free */ public function keys(): Set { } /** * @template TNewValue * @param callable(TKey, TValue): TNewValue $callback * @return Map * @psalm-mutation-free */ public function map(callable $callback): Map { } /** * @return Sequence> * @psalm-mutation-free */ public function pairs(): Sequence { } /** * @param TKey $key * @param TValue $value */ public function put($key, $value) { } /** * @param iterable $values */ public function putAll(iterable $values) { } /** * @template TCarry * @param callable(TCarry, TKey, TValue): TCarry $callback * @param TCarry $initial * @return TCarry * @psalm-mutation-free */ public function reduce(callable $callback, $initial = null) { } /** * @template TDefault * @param TKey $key * @param TDefault $default * @return ( * func_num_args() is 1 * ? TValue * : TValue|TDefault * ) * @throws \OutOfBoundsException */ public function remove($key, $default = null) { } /** * @return Map * @psalm-mutation-free */ public function reversed(): Map { } /** * @return Map * @psalm-mutation-free */ public function slice(int $offset, ?int $length = null): Map { } /** * @param (callable(TValue, TValue): int)|null $comparator */ public function sort(callable $comparator = null) { } /** * @param (callable(TValue, TValue): int)|null $comparator * @return Map * @psalm-mutation-free */ public function sorted(callable $comparator = null): Map { } /** * @param (callable(TKey, TKey): int)|null $comparator */ public function ksort(callable $comparator = null) { } /** * @param (callable(TKey, TKey): int)|null $comparator * @return Map * @psalm-mutation-free */ public function ksorted(callable $comparator = null): Map { } /** * @return Sequence * @psalm-mutation-free */ public function values(): Sequence { } /** * @template TKey2 * @template TValue2 * @param Map $map * @return Map * @psalm-mutation-free */ public function union(Map $map): Map { } /** * @template TKey2 * @template TValue2 * @param Map $map * @return Map * @psalm-mutation-free */ public function xor(Map $map): Map { } } /** * @template-covariant TKey * @template-covariant TValue */ final class Pair implements JsonSerializable { /** * @var TKey */ public $key; /** * @var TValue */ public $value; /** * @param TKey $key * @param TValue $value */ public function __construct($key = null, $value = null) { } /** * @return Pair * @psalm-mutation-free */ public function copy(): Pair { } } /** * @template TValue * @extends Collection * @extends ArrayAccess */ interface Sequence extends Collection, ArrayAccess { /** * @return Sequence * @psalm-mutation-free */ public function copy(): Sequence; /** * @return list * @psalm-mutation-free */ public function toArray(): array; /** * @psalm-mutation-free */ public function isEmpty(): bool; /** * @psalm-mutation-free */ public function count(): int; /** * @psalm-mutation-free */ public function allocate(int $capacity): void; /** * @psalm-mutation-free */ public function capacity(): int; /** * @return float|int * @psalm-mutation-free */ public function sum(); /** * @param callable(TValue): TValue $callback */ public function apply(callable $callback): void; /** * @param TValue ...$values * @psalm-mutation-free */ public function contains(...$values): bool; /** * @param (callable(TValue): bool)|null $callback * @return Sequence * @psalm-mutation-free */ public function filter(callable $callback = null): Sequence; /** * @param TValue $value * @return int|false * @psalm-mutation-free */ public function find($value); /** * @return TValue * @throws \UnderflowException * @psalm-mutation-free */ public function first(); /** * @return TValue * @throws \OutOfRangeException * @psalm-mutation-free */ public function get(int $index); /** * @param TValue ...$values * @throws \OutOfRangeException */ public function insert(int $index, ...$values); /** * @psalm-mutation-free */ public function join(?string $glue = null): string; /** * @return TValue * @throws \UnderflowException * @psalm-mutation-free */ public function last(); /** * @template TNewValue * @param callable(TValue): TNewValue $callback * @return Sequence * @psalm-mutation-free */ public function map(callable $callback): Sequence; /** * @template TValue2 * @param iterable $values * @return Sequence * @psalm-mutation-free */ public function merge(iterable $values): Sequence; /** * @return TValue * @throws \UnderflowException */ public function pop(); /** * @param TValue ...$values */ public function push(...$values); /** * @template TCarry * @param callable(TCarry, TValue): TCarry $callback * @param TCarry $initial * @return TCarry * @psalm-mutation-free */ public function reduce(callable $callback, $initial = null); /** * @return TValue * @throws \OutOfRangeException */ public function remove(int $index); /** * @return Sequence * @psalm-mutation-free */ public function reversed(): Sequence; /** * @param TValue $value * @throws \OutOfRangeException */ public function set(int $index, $value); /** * @return TValue * @throws \UnderflowException */ public function shift(); /** * @return Sequence * @psalm-mutation-free */ public function slice(int $index, ?int $length = null): Sequence; /** * @param (callable(TValue, TValue): int)|null $comparator */ public function sort(callable $comparator = null); /** * @param (callable(TValue, TValue): int)|null $comparator * @return Sequence * @psalm-mutation-free */ public function sorted(callable $comparator = null): Sequence; /** * @param TValue ...$values */ public function unshift(...$values); } /** * @template TValue * @implements Sequence */ final class Vector implements Sequence { /** * @param iterable $values */ public function __construct(iterable $values = []) { } /** * @return Vector * @psalm-mutation-free */ public function copy(): Vector { } /** * @return list * @psalm-mutation-free */ public function toArray(): array { } /** * @psalm-mutation-free */ public function isEmpty(): bool { } /** * @psalm-mutation-free */ public function count(): int { } /** * @psalm-mutation-free */ public function allocate(int $capacity): void { } /** * @psalm-mutation-free */ public function capacity(): int { } /** * @return float|int * @psalm-mutation-free */ public function sum() { } /** * @param TValue ...$values * @psalm-mutation-free */ public function contains(...$values): bool { } /** * @param (callable(TValue): bool)|null $callback * @return Vector * @psalm-mutation-free */ public function filter(callable $callback = null): Vector { } /** * @param TValue $value * @return int|false * @psalm-mutation-free */ public function find($value) { } /** * @return TValue * @throws \UnderflowException * @psalm-mutation-free */ public function first() { } /** * @return TValue * @throws \OutOfRangeException * @psalm-mutation-free */ public function get(int $index) { } /** * @psalm-mutation-free */ public function join(?string $glue = null): string { } /** * @return TValue * @throws \UnderflowException * @psalm-mutation-free */ public function last() { } /** * @template TNewValue * @param callable(TValue): TNewValue $callback * @return Vector * @psalm-mutation-free */ public function map(callable $callback): Vector { } /** * @template TValue2 * @param iterable $values * @return Vector * @psalm-mutation-free */ public function merge(iterable $values): Sequence { } /** * @return TValue * @throws \UnderflowException */ public function pop() { } /** * @template TCarry * @param callable(TCarry, TValue): TCarry $callback * @param TCarry $initial * @return TCarry * @psalm-mutation-free */ public function reduce(callable $callback, $initial = null) { } /** * @return TValue * @throws \OutOfRangeException */ public function remove(int $index) { } /** * @return Vector * @psalm-mutation-free */ public function reversed(): Vector { } /** * @return TValue * @throws \UnderflowException */ public function shift() { } /** * @return Vector * @psalm-mutation-free */ public function slice(int $offset, ?int $length = null): Vector { } /** * @param (callable(TValue, TValue): int)|null $comparator * @return Vector * @psalm-mutation-free */ public function sorted(callable $comparator = null): Vector { } } /** * @template TValue * @implements Collection * @implements ArrayAccess */ final class Set implements Collection, ArrayAccess { /** * @param iterable $values */ public function __construct(iterable $values = []) { } /** * @return Set * @psalm-mutation-free */ public function copy(): Set { } /** * @return list * @psalm-mutation-free */ public function toArray(): array { } /** * @psalm-mutation-free */ public function isEmpty(): bool { } /** * @psalm-mutation-free */ public function count(): int { } /** * @psalm-mutation-free */ public function allocate(int $capacity): void { } /** * @psalm-mutation-free */ public function capacity(): int { } /** * @param TValue ...$values */ public function add(...$values): void { } /** * @param TValue ...$values * @psalm-mutation-free */ public function contains(...$values): bool { } /** * @template TValue2 * @param Set $set * @return Set * @psalm-mutation-free */ public function diff(Set $set): Set { } /** * @param (callable(TValue): bool)|null $callback * @return Set * @psalm-mutation-free */ public function filter(callable $callback = null): Set { } /** * @return TValue * @throws \UnderflowException * @psalm-mutation-free */ public function first() { } /** * @return TValue * @throws \OutOfRangeException * @psalm-mutation-free */ public function get(int $index) { } /** * @template TValue2 * @param Set $set * @return Set * @psalm-mutation-free */ public function intersect(Set $set): Set { } /** * @return TValue * @throws \UnderflowException * @psalm-mutation-free */ public function last() { } /** * @template TNewValue * @param callable(TValue): TNewValue $callback * @return Set */ public function map(callable $callback): Set { } /** * @template TValue2 * @param iterable $values * @return Set * @psalm-mutation-free */ public function merge(iterable $values): Set { } /** * @param TValue ...$values */ public function remove(...$values): void { } /** * @return Set * @psalm-mutation-free */ public function reversed(): Set { } /** * @return Set * @psalm-mutation-free */ public function slice(int $index, ?int $length = null): Set { } /** * @param (callable(TValue, TValue): int)|null $comparator */ public function sort(callable $comparator = null): void { } /** * @param (callable(TValue, TValue): int)|null $comparator * @return Set * @psalm-mutation-free */ public function sorted(callable $comparator = null): Set { } /** * @template TValue2 * @param Set $set * @return Set * @psalm-mutation-free */ public function union(Set $set): Set { } /** * @template TValue2 * @param Set $set * @return Set * @psalm-mutation-free */ public function xor(Set $set): Set { } } /** * @template TValue * @implements Collection * @implements ArrayAccess */ final class Stack implements Collection, ArrayAccess { /** * @param iterable $values */ public function __construct(iterable $values = []) { } /** * @return Stack * @psalm-mutation-free */ public function copy(): Stack { } /** * @return list * @psalm-mutation-free */ public function toArray(): array { } /** * @psalm-mutation-free */ public function isEmpty(): bool { } /** * @psalm-mutation-free */ public function count(): int { } /** * @psalm-mutation-free */ public function allocate(int $capacity): void { } /** * @psalm-mutation-free */ public function capacity(): int { } /** * @return TValue * @throws UnderflowException * @psalm-mutation-free */ public function peek() { } /** * @return TValue * @throws UnderflowException */ public function pop() { } /** * @param TValue ...$values */ public function push(...$values): void { } } /** * @template TValue * @implements Collection * @implements ArrayAccess */ final class Queue implements Collection, ArrayAccess { /** * @param iterable $values */ public function __construct(iterable $values = []) { } /** * @return Queue * @psalm-mutation-free */ public function copy(): Queue { } /** * @return list * @psalm-mutation-free */ public function toArray(): array { } /** * @psalm-mutation-free */ public function isEmpty(): bool { } /** * @psalm-mutation-free */ public function count(): int { } /** * @psalm-mutation-free */ public function allocate(int $capacity): void { } /** * @psalm-mutation-free */ public function capacity(): int { } /** * @return TValue * @throws UnderflowException * @psalm-mutation-free */ public function peek() { } /** * @return TValue * @throws UnderflowException */ public function pop() { } /** * @param TValue ...$values */ public function push(...$values): void { } } /** * @template TValue * @implements Collection */ final class PriorityQueue implements Collection { /** * @return PriorityQueue * @psalm-mutation-free */ public function copy(): PriorityQueue { } /** * @return list * @psalm-mutation-free */ public function toArray(): array { } /** * @psalm-mutation-free */ public function isEmpty(): bool { } /** * @psalm-mutation-free */ public function count(): int { } /** * @psalm-mutation-free */ public function allocate(int $capacity): void { } /** * @psalm-mutation-free */ public function capacity(): int { } /** * @return TValue * @throws UnderflowException * @psalm-mutation-free */ public function peek() { } /** * @return TValue * @throws UnderflowException */ public function pop() { } /** * @param TValue $value */ public function push($value, int $priority): void { } } > $dimensions */ public static function arrayType(\FFI\CType $type, array $dimensions): \FFI\CType { } public static function addr(\FFI\CData $ptr): \FFI\CData { } /** * @param \FFI\CData|\FFI\CType $ptr * @return int<0,max> */ public static function sizeof($ptr): int { } /** * @param \FFI\CData|\FFI\CType $ptr * @return positive-int */ public static function alignof($ptr): int { } /** * @param \FFI\CData|string $from * @param int<0,max> $size */ public static function memcpy(\FFI\CData $to, $from, int $size): void { } /** * @param string|\FFI\CData $ptr1 * @param string|\FFI\CData $ptr2 * @param int<0,max> $size */ public static function memcmp(&$ptr1, &$ptr2, int $size): int { } /** * @param int<0,max> $size */ public static function memset(\FFI\CData $ptr, int $value, int $size): void { } /** * @param int<0,max>|null $size */ public static function string(\FFI\CData $ptr, ?int $size = null): string { } public static function isNull(\FFI\CData $ptr): bool { } public function __call(...$values) { } /** * @param mixed $value * @return mixed $value */ public function __set(string $key, $value) { } /** * @return string|int|float|\FFI\CData|null */ public function __get(string $key) { } } } namespace FFI { /** * @since 7.4.0 */ final class CData implements \Countable, \ArrayAccess, \Countable, \Traversable { /** * @return bool */ public function offsetExists($offset) { } /** * @return mixed|null */ public function offsetGet($offset) { } /** * @param mixed|null $value * @return void */ public function offsetSet($offset, $value) { } /** * @return void */ public function offsetUnset($offset) { } } /** * @since 7.4.0 */ final class CType { /** * @since 8.1 */ public const TYPE_VOID = 0; /** * @since 8.1 */ public const TYPE_FLOAT = 1; /** * @since 8.1 */ public const TYPE_DOUBLE = 2; /** * @since 8.1 */ public const TYPE_LONGDOUBLE = 3; /** * @since 8.1 */ public const TYPE_UINT8 = 4; /** * @since 8.1 */ public const TYPE_SINT8 = 5; /** * @since 8.1 */ public const TYPE_UINT16 = 6; /** * @since 8.1 */ public const TYPE_SINT16 = 7; /** * @since 8.1 */ public const TYPE_UINT32 = 8; /** * @since 8.1 */ public const TYPE_SINT32 = 9; /** * @since 8.1 */ public const TYPE_UINT64 = 10; /** * @since 8.1 */ public const TYPE_SINT64 = 11; /** * @since 8.1 */ public const TYPE_ENUM = 12; /** * @since 8.1 */ public const TYPE_BOOL = 13; /** * @since 8.1 */ public const TYPE_CHAR = 14; /** * @since 8.1 */ public const TYPE_POINTER = 15; /** * @since 8.1 */ public const TYPE_FUNC = 16; /** * @since 8.1 */ public const TYPE_ARRAY = 17; /** * @since 8.1 */ public const TYPE_STRUCT = 18; /** * @since 8.1 */ public const ATTR_CONST = 1; /** * @since 8.1 */ public const ATTR_INCOMPLETE_TAG = 2; /** * @since 8.1 */ public const ATTR_VARIADIC = 4; /** * @since 8.1 */ public const ATTR_INCOMPLETE_ARRAY = 8; /** * @since 8.1 */ public const ATTR_VLA = 16; /** * @since 8.1 */ public const ATTR_UNION = 32; /** * @since 8.1 */ public const ATTR_PACKED = 64; /** * @since 8.1 */ public const ATTR_MS_STRUCT = 128; /** * @since 8.1 */ public const ATTR_GCC_STRUCT = 256; /** * @since 8.1 */ public const ABI_DEFAULT = 0; /** * @since 8.1 */ public const ABI_CDECL = 1; /** * @since 8.1 */ public const ABI_FASTCALL = 2; /** * @since 8.1 */ public const ABI_THISCALL = 3; /** * @since 8.1 */ public const ABI_STDCALL = 4; /** * @since 8.1 */ public const ABI_PASCAL = 5; /** * @since 8.1 */ public const ABI_REGISTER = 6; /** * @since 8.1 */ public const ABI_MS = 7; /** * @since 8.1 */ public const ABI_SYSV = 8; /** * @since 8.1 */ public const ABI_VECTORCALL = 9; public function getName(): string { } /** * @since 8.1.0 * @return self::TYPE_* */ public function getKind(): int { } /** * @since 8.1.0 * @return int<0,max> */ public function getSize(): int { } /** * @since 8.1.0 * @return int<0,max> */ public function getAlignment(): int { } /** * @since 8.1.0 */ public function getAttributes(): int { } /** * @since 8.1.0 * @return self::TYPE_UINT32|self::TYPE_UINT64 */ public function getEnumKind(): int { } /** * @since 8.1.0 */ public function getArrayElementType(): CType { } /** * @since 8.1.0 * @return int<0,max> */ public function getArrayLength(): int { } /** * @since 8.1.0 */ public function getPointerType(): CType { } /** * @since 8.1.0 * @return string[] */ public function getStructFieldNames(): array { } /** * @since 8.1.0 * @return int<0,max> */ public function getStructFieldOffset(string $name): int { } /** * @since 8.1.0 */ public function getStructFieldType(string $name): CType { } /** * @since 8.1.0 * @return self::ABI_* */ public function getFuncABI(): int { } /** * @since 8.1.0 */ public function getFuncReturnType(): CType { } /** * @since 8.1.0 * @return int<0,max> */ public function getFuncParameterCount(): int { } /** * @param int<0,max> $index * @since 8.1.0 */ public function getFuncParameterType(int $index): CType { } } /** * @since 7.4.0 */ class Exception extends \Error { } /** * @since 7.4.0 */ final class ParserException extends Exception { } } > */ function xdebug_get_code_coverage() : array { } /** * @param array $configuration */ function xdebug_set_filter(int $group, int $list_type, array $configuration) : array { } function xdebug_start_code_coverage(int $options) : void { } function xdebug_stop_code_coverage(int $cleanup = 1) : void { } ` operator. * * @param mixed $other * * @return int 0 if this decimal is considered is equal to $other, * -1 if this decimal should be placed before $other, * 1 if this decimal should be placed after $other. */ public function compareTo($other): int {} /** * String representation. * * This method is equivalent to a cast to string, as well as `toString`. * * @return string the value of this decimal represented exactly, in either * fixed or scientific form, depending on the value. */ public function __toString(): string {} /** * JSON * * This method is only here to honour the interface, and is equivalent to * `toString`. JSON does not have a decimal type so all decimals are encoded * as strings in the same format as `toString`. * * @return string */ public function jsonSerialize() {} } */ class DatePeriod implements Traversable { const EXCLUDE_START_DATE = 1; /** * @param Start $start * @param (Start is string ? 0|self::EXCLUDE_START_DATE : DateInterval) $interval * @param (Start is string ? never : DateTimeInterface|positive-int) $end * @param (Start is string ? never : 0|self::EXCLUDE_START_DATE) $options */ public function __construct($start, $interval = 0, $end = 1, $options = 0) {} } /** * @psalm-taint-specialize */ interface Throwable { /** * @psalm-mutation-free */ public function getMessage() : string; /** * @psalm-mutation-free * * @return int|string https://www.php.net/manual/en/throwable.getcode.php */ public function getCode(); /** * @psalm-mutation-free */ public function getFile() : string; /** * @psalm-mutation-free */ public function getLine() : int; /** * @psalm-mutation-free * @return list',args?:array}> */ public function getTrace() : array; /** * @psalm-mutation-free */ public function getPrevious() : ?Throwable; /** * @psalm-mutation-free * @psalm-taint-source input */ public function getTraceAsString() : string; /** * @return string * @psalm-taint-source input */ public function __toString(); } /** * @psalm-taint-specialize */ class Exception implements Throwable { /** * @var string */ protected $message = ''; /** * @var int */ protected $code = 0; /** * @var string */ protected $file = ''; /** * @var int */ protected $line = 0; /** * @psalm-external-mutation-free * @param string $message * @param int $code * @param Throwable $previous */ public function __construct($message = "", $code = 0, Throwable $previous = null) {} /** * @psalm-mutation-free */ public final function getMessage() : string {} /** * @psalm-mutation-free * * @return int|string https://www.php.net/manual/en/throwable.getcode.php */ public final function getCode() {} /** * @psalm-mutation-free */ public final function getFile(): string {} /** * @psalm-mutation-free */ public final function getLine(): int {} /** * @psalm-mutation-free * @return list',args?:array}> */ public final function getTrace() : array {} /** * @psalm-mutation-free */ public final function getPrevious() : ?Throwable {} /** * @psalm-mutation-free * @psalm-taint-source input */ public final function getTraceAsString() : string {} /** * @return string * @psalm-taint-source input */ public function __toString() {} } /** * @psalm-taint-specialize */ class Error implements Throwable { /** * @var string */ protected $message = ''; /** * @var int */ protected $code = 0; /** * @var string */ protected $file = ''; /** * @var int */ protected $line = 0; /** * @psalm-external-mutation-free * @param string $message * @param int $code * @param Throwable $previous */ public function __construct($message = "", $code = 0, Throwable $previous = null) {} /** * @psalm-mutation-free */ public final function getMessage() : string {} /** * @psalm-mutation-free */ public final function getCode(): int {} /** * @psalm-mutation-free */ public final function getFile(): string {} /** * @psalm-mutation-free */ public final function getLine(): int{} /** * @psalm-mutation-free * @return list',args?:array}> */ public final function getTrace() : array {} /** * @psalm-mutation-free */ public final function getPrevious() : ?Throwable {} /** * @psalm-mutation-free * @psalm-taint-source input */ public final function getTraceAsString() : string {} /** * @return string * @psalm-taint-source input */ public function __toString() {} } */ abstract public function getRawArgs(): array; public function isFirstClassCallable(): bool {} /** * @psalm-pure * @return list */ public function getArgs(): array {} } */ interface IteratorAggregate extends Traversable { /** * @return Traversable An instance of an object implementing Iterator or Traversable */ public function getIterator(); } /** * @template-covariant TKey * @template-covariant TValue * * @template-extends Traversable */ interface Iterator extends Traversable { /** * @return TValue|null returns current value or null when iterator is drained * @psalm-ignore-nullable-return */ public function current(); /** * @return void Any returned value is ignored. */ public function next(); /** * @return TKey|null current key or null when iterator is drained * @psalm-ignore-nullable-return */ public function key(); /** * @return bool The return value will be casted to boolean and then evaluated. * Returns true on success or false on failure. */ public function valid(); /** * @return void Any returned value is ignored. */ public function rewind(); } /** * @template-covariant TKey * @template-covariant TValue * * @template-extends Iterator */ interface OuterIterator extends Iterator { /** * @return Iterator */ public function getInnerIterator(); } /** * @template-covariant TKey * @template-covariant TValue * * @template-extends Iterator */ interface RecursiveIterator extends Iterator { /** * @return bool true if the current entry can be iterated over, otherwise returns false. */ public function hasChildren(); /** * @return RecursiveIterator An iterator for the current entry. */ public function getChildren(); } /** * @template-covariant TKey * @template-covariant TValue * @template-extends Iterator */ interface SeekableIterator extends Iterator { /** * Seeks to a position * @link https://php.net/manual/en/seekableiterator.seek.php * * @param int $position The position to seek to. * @return void * * @since 5.1.0 */ public function seek($position); } /** * @template-covariant TKey * @template-covariant TValue * @template-covariant TIterator as Traversable * * @template-implements OuterIterator * * @mixin TIterator */ class IteratorIterator implements OuterIterator { /** * @param TIterator $iterator */ public function __construct(Traversable $iterator) {} /** * @return TValue|null current value or null when iterator is drained * @psalm-ignore-nullable-return */ public function current() {} /** * @return TKey|null current key value or null when iterator is drained * @psalm-ignore-nullable-return */ public function key() {} } /** * @template TKey * @template TValue * @template TIterator as Iterator * * @template-extends IteratorIterator */ class AppendIterator extends IteratorIterator { public function __construct(){} /** * @param TIterator $iterator * @return void */ public function append(Iterator $iterator) {} /** * @return ArrayIterator */ public function getArrayIterator() {} /** * @return int */ public function getIteratorIndex() {} /** * @return TValue|null current value or null when iterator is drained * @psalm-ignore-nullable-return */ public function current() {} /** * @return TKey|null current value or null when iterator is drained * @psalm-ignore-nullable-return */ public function key() {} } /** * @template TKey as array-key * @template TValue * @template-implements SeekableIterator * @template-implements ArrayAccess */ class ArrayIterator implements SeekableIterator, ArrayAccess, Serializable, Countable { const STD_PROP_LIST = 1; const ARRAY_AS_PROPS = 2; /** * @param array $array The array or object to be iterated on. * @param int-mask-of $flags Flags to control the behaviour of the ArrayObject object. */ public function __construct($array = array(), $flags = 0) { } /** * @param TKey $index The offset being checked. * @return bool true if the offset exists, otherwise false */ public function offsetExists($index) { } /** * @param TKey $index The offset to get the value from. * @return TValue|null The value at offset index, null when accessing invalid indexes * @psalm-ignore-nullable-return */ public function offsetGet($index) { } /** * @param TKey $index The index to set for. * @param TValue $newval The new value to store at the index. * @return void */ public function offsetSet($index, $newval) { } /** * @param TKey $index The offset to unset. * @return void */ public function offsetUnset($index) { } /** * @param TValue $value The value to append. * @return void */ public function append($value) { } /** * @return array A copy of the array, or array of public properties * if ArrayIterator refers to an object. */ public function getArrayCopy() { } /** * @return int The number of elements or public properties in the associated * array or object, respectively. */ public function count() { } /** * @return int-mask-of The current flags. */ public function getFlags() { } /** * @param int-mask-of $flags bitmask * @return void */ public function setFlags($flags) { } /** * @return void */ public function asort() { } /** * @return void */ public function ksort() { } /** * @param callable(TValue,TValue):int $cmp_function The compare function used for the sort. * @return void */ public function uasort($cmp_function) { } /** * @param callable(TKey,TKey):int $cmp_function The compare function used for the sort. * @return void */ public function uksort($cmp_function) { } /** * @return void */ public function natsort() { } /** * @return void */ public function natcasesort() { } /** * @param string $serialized The serialized ArrayIterator object to be unserialized. * @return void */ public function unserialize($serialized) { } /** * @return string The serialized ArrayIterator */ public function serialize() { } /** * @return void */ public function rewind() { } /** * @return TValue|null current value or null when iterator is drained * @psalm-ignore-nullable-return */ public function current() { } /** * @return TKey|null The current array key or null when iterator is drained * @psalm-ignore-nullable-return */ public function key() { } /** * @return void */ public function next() { } /** * @return bool */ public function valid() { } /** * @param int $position The position to seek to. * @return void */ public function seek($position) { } } /** * @template-covariant TKey * @template-covariant TValue * @template-covariant TIterator as Traversable * * @template-extends IteratorIterator */ abstract class FilterIterator extends IteratorIterator { /** @return bool */ abstract public function accept(); /** * @return TValue Can return any type. */ public function current() {} /** * @return TKey scalar on success, or null on failure. */ public function key() {} } /** * @template-covariant TKey * @template-covariant TValue * @template-covariant TIterator as Iterator * * @template-implements OuterIterator * @template-implements ArrayAccess * * @template-extends IteratorIterator */ class CachingIterator extends IteratorIterator implements OuterIterator , ArrayAccess , Countable { const CALL_TOSTRING = 1 ; const CATCH_GET_CHILD = 16 ; const TOSTRING_USE_KEY = 2 ; const TOSTRING_USE_CURRENT = 4 ; const TOSTRING_USE_INNER = 8 ; const FULL_CACHE = 256 ; /** * @param TIterator $iterator * @param int-mask-of $flags */ public function __construct(Iterator $iterator, int $flags = self::CALL_TOSTRING) {} /** @return bool */ public function hasNext () {} /** * @return TValue|null current value or null when iterator is drained * @psalm-ignore-nullable-return */ public function current() {} /** * @return TKey|null current key or null when iterator is drained * @psalm-ignore-nullable-return */ public function key() {} /** * @return array */ public function getCache() {} } /** * @template-covariant TKey * @template-covariant TValue * @template-covariant TIterator as Iterator * * @template-implements OuterIterator * * @template-extends FilterIterator */ class CallbackFilterIterator extends FilterIterator implements OuterIterator { /** * @param TIterator $iterator * @param callable(TValue, TKey, TIterator): bool $callback */ public function __construct(Iterator $iterator, callable $callback) {} /** * @return TValue|null current value or null when iterator is drained * @psalm-ignore-nullable-return */ public function current() {} /** * @return TKey|null current key or null when iterator is drained * @psalm-ignore-nullable-return */ public function key() {} } /** * @template-implements SeekableIterator */ class DirectoryIterator extends SplFileInfo implements SeekableIterator { public function __construct(string $path){} /** * @return self */ public function current() {} /** * @return int|false * @psalm-ignore-falsable-return */ public function key() {} /** * @return void */ public function next(){} /** * @return void */ public function rewind(){} /** * @param int $position */ public function seek($position) {} /** * @return bool */ public function valid(){} } /** * @template-implements Iterator */ class EmptyIterator implements Iterator { /** * @return never */ public function current() {} /** * @return never */ public function key() {} /** * @return void */ public function next() {} /** * @return void */ public function rewind() {} /** * @return false */ public function valid() {} } /** * @template-extends SeekableIterator */ class FilesystemIterator extends DirectoryIterator { const CURRENT_AS_PATHNAME = 32; const CURRENT_AS_FILEINFO = 0; const CURRENT_AS_SELF = 16; const CURRENT_MODE_MASK = 240; const KEY_AS_PATHNAME = 0; const KEY_AS_FILENAME = 256; const FOLLOW_SYMLINKS = 512; const KEY_MODE_MASK = 3840; const NEW_CURRENT_AND_KEY = 256; const SKIP_DOTS = 4096; const UNIX_PATHS = 8192; /** * @param int-mask $flags */ public function __construct(string $path, int $flags = self::KEY_AS_PATHNAME|self::CURRENT_AS_FILEINFO|self::SKIP_DOTS) {} /** * @return FilesystemIterator|SplFileInfo|string|null * @psalm-ignore-nullable-return */ public function current() {} /** * @return int-mask */ public function getFlags() {} /** * @param int-mask $flags * @return void */ public function setFlags($flags) {} /** * @return string|null * @psalm-ignore-nullable-return */ public function key() {} } /** * @template-extends SeekableIterator */ class GlobIterator extends FilesystemIterator implements Countable { /** * @return int */ public function count() {} } /** * @template-covariant TKey * @template-covariant TValue * @template-covariant TIterator as Iterator * * @template-extends IteratorIterator */ class InfiniteIterator extends IteratorIterator { /** * @param TIterator $iterator */ public function __construct(Iterator $iterator) {} /** * @return TValue|null current value or null if iterator is drained * @psalm-ignore-nullable-return */ public function current() {} /** * @return TKey|null current key or null when iterator is drained * @psalm-ignore-nullable-return */ public function key() {} } /** * @template-covariant TKey * @template-covariant TValue * @template-covariant TIterator as Iterator * * @template-implements OuterIterator * * @template-extends IteratorIterator */ class LimitIterator extends IteratorIterator implements OuterIterator { /** * @param TIterator $iterator */ public function __construct(Iterator $iterator, int $offset = 0, int $limit = -1) {} /** * @return TValue|null current value or null when iterator is drained * @psalm-ignore-nullable-return */ public function current() {} /** * @return TKey|null current key or null when iterator is drained * @psalm-ignore-nullable-return */ public function key() {} } /** * @template-covariant TKey * @template-covariant TValue * @template-covariant TIterator as Iterator * * @template-extends IteratorIterator */ class NoRewindIterator extends IteratorIterator { /** * @param TIterator $iterator */ public function __construct(Iterator $iterator) {} /** * @return TValue|null current value or null when iterator is drained * @psalm-ignore-nullable-return */ public function current() {} /** * @return TKey|null current value or null when iterator is drained * @psalm-ignore-nullable-return */ public function key() {} } /** * * @template-covariant TKey * @template-covariant TValue * * @template-implements Iterator */ class MultipleIterator implements Iterator { const MIT_NEED_ANY = 0 ; const MIT_NEED_ALL = 1 ; const MIT_KEYS_NUMERIC = 0 ; const MIT_KEYS_ASSOC = 2 ; /** * @param int-mask-of $flags */ public function __construct (int $flags = 0) {} /** * @param Iterator $iterator * @param string|int $infos * @return void */ public function attachIterator(Iterator $iterator, $infos = '') {} /** * @param Iterator $iterator * @return bool */ public function containsIterator(Iterator $iterator) {} /** * @return int */ public function countIterators() {} /** * nullable values are returned when MIT_NEED_ANY is set * and one of the iterators is already drained. * When MIT_NEED_ALL is set and one of the iterators * is already drained, `current()` throws * * @return array */ public function current() {} /** * @param Iterator $iterator * @return void */ public function detachIterator(Iterator $iterator) {} /** * @return int-mask-of */ public function getFlags() {} /** * @return array */ public function key() {} /** * @param int-mask-of $flags * @return void */ public function setFlags( int $flags ) {} } /** * @template TKey * @template TValue * @template TIterator as RecursiveIterator * * @template-extends FilterIterator * @template-implements RecursiveIterator */ abstract class RecursiveFilterIterator extends FilterIterator implements RecursiveIterator { /** * @param TIterator $iterator */ public function __construct(RecursiveIterator $iterator) {} /** * @return TIterator */ public function getChildren() {} /** * @return bool */ public function hasChildren() {} /** * @return TValue|null current value or null when iterator is drained * @psalm-ignore-nullable-return */ public function current() {} /** * @return TKey|null current value or null when iterator is drained * @psalm-ignore-nullable-return */ public function key() {} } /** * @template TKey * @template TValue * @template TIterator as RecursiveIterator * * @template-extends RecursiveFilterIterator */ class ParentIterator extends RecursiveFilterIterator implements RecursiveIterator, OuterIterator { /** * @return bool */ public function accept() {} /** * @param TIterator $iterator */ public function __construct(RecursiveIterator $iterator) {} /** * @return ParentIterator */ public function getChildren() {} /** * @return bool */ public function hasChildren() {} /** * @return void */ public function next() {} /** * @return void */ public function rewind() {} /** * @return TValue|null current value or null when iterator is drained * @psalm-ignore-nullable-return */ public function current() {} /** * @return TKey|null current key or null when iterator is drained * @psalm-ignore-nullable-return */ public function key() {} } /** * @template TKey * @template TValue * * @template-implements RecursiveIterator * @template-extends ArrayIterator */ class RecursiveArrayIterator extends ArrayIterator implements RecursiveIterator { const STD_PROP_LIST = 1 ; const ARRAY_AS_PROPS = 2 ; const CHILD_ARRAYS_ONLY = 4 ; /** * @return RecursiveArrayIterator */ public function getChildren() {} /** * @return bool */ public function hasChildren() {} /** * @return TValue|null current value or null when iterator is drained * @psalm-ignore-nullable-return */ public function current() {} /** * @return TKey|null current key or null when iterator is drained * @psalm-ignore-nullable-return */ public function key() {} } /** * @template TKey * @template TValue * @template TIterator as Iterator * * @template-implements RecursiveIterator * @template-extends CachingIterator */ class RecursiveCachingIterator extends CachingIterator implements RecursiveIterator { /** * @return RecursiveCachingIterator */ public function getChildren() {} /** * @return bool */ public function hasChildren() {} } /** * @template TKey * @template TValue * @template TIterator as RecursiveIterator * * @template-implements RecursiveIterator * @template-extends CallbackFilterIterator */ class RecursiveCallbackFilterIterator extends CallbackFilterIterator implements RecursiveIterator { /** * @param TIterator $iterator * @param callable(TValue, TKey, TIterator): bool $callback */ public function __construct(RecursiveIterator $iterator, callable $callback) {} /** * @return RecursiveCallbackFilterIterator */ public function getChildren() {} /** * @return bool */ public function hasChildren() {} /** * @return TValue|null current value or null when iterator is drained */ public function current() {} /** * @return TKey|null current value or null when iterator is drained */ public function key() {} } /** * @template-implements RecursiveIterator * @template-implements SeekableIterator */ class RecursiveDirectoryIterator extends FilesystemIterator implements RecursiveIterator, SeekableIterator { const CURRENT_AS_PATHNAME = 32 ; const CURRENT_AS_FILEINFO = 0 ; const CURRENT_AS_SELF = 16 ; const CURRENT_MODE_MASK = 240 ; const KEY_AS_PATHNAME = 0 ; const KEY_AS_FILENAME = 256 ; const FOLLOW_SYMLINKS = 512 ; const KEY_MODE_MASK = 3840 ; const NEW_CURRENT_AND_KEY = 256 ; const SKIP_DOTS = 4096 ; const UNIX_PATHS = 8192 ; /** * @param string $path * @param int-mask $flags */ public function __construct(string $path, int $flags = self::KEY_AS_PATHNAME|self::CURRENT_AS_FILEINFO) {} /** * @return string */ public function getSubPath() {} /** * @return string */ public function getSubPathname() {} /** * @return RecursiveDirectoryIterator|string|SplFileInfo|null current value or null when iterator is drained * @psalm-ignore-nullable-return */ public function current() {} /** * @return string|null current key or null when iterator is drained * @psalm-ignore-nullable-return */ public function key() {} } /** * @template TIterator as RecursiveIterator|IteratorAggregate * @mixin TIterator */ class RecursiveIteratorIterator implements OuterIterator { /** * @param TIterator $iterator * @param int $mode * @param int $flags * * @return void */ public function __construct($iterator, $mode = 0, $flags = 0) {} } /** * @template TKey * @template TValue * @template TIterator as RecursiveIterator * * @template-implements RecursiveIterator * @template-extends RegexIterator */ class RecursiveRegexIterator extends RegexIterator implements RecursiveIterator { const MATCH = 0 ; const GET_MATCH = 1 ; const ALL_MATCHES = 2 ; const SPLIT = 3 ; const REPLACE = 4 ; const USE_KEY = 1 ; /** * @param TIterator $iterator * @param string $regex * @param self::MATH|self::GET_MATCH|self::ALL_MATCHES|self::SPLIT|self::REPLACE $mode * @param self::USE_KEY|0 $flags * @param int $preg_flags */ public function __construct(RecursiveIterator $iterator, string $regex, int $mode = self::MATCH, int $flags = 0, int $preg_flags = 0) {} /** * @return RecursiveRegexIterator */ public function getChildren() {} } /** * @template TKey * @template TValue * * @template-extends RecursiveIteratorIterator * @template-implements OuterIterator */ class RecursiveTreeIterator extends RecursiveIteratorIterator implements OuterIterator { const LEAVES_ONLY = 0 ; const SELF_FIRST = 1 ; const CHILD_FIRST = 2 ; const CATCH_GET_CHILD = 16 ; const BYPASS_CURRENT = 4 ; const BYPASS_KEY = 8 ; const PREFIX_LEFT = 0 ; const PREFIX_MID_HAS_NEXT = 1 ; const PREFIX_MID_LAST = 2 ; const PREFIX_END_HAS_NEXT = 3 ; const PREFIX_END_LAST = 4 ; const PREFIX_RIGHT = 5 ; /** * @return void */ public function beginChildren() {} /** * @return RecursiveIterator */ public function beginIteration() {} /** * @return RecursiveIterator */ public function callGetChildren() {} /** * @return bool */ public function callHasChildren() {} /** * @param RecursiveIterator|IteratorAggregate $it * @param int-mask $flags * @param int-mask $cit_flags * @param self::LEAVES_ONLY|self::SELF_FIRST|self::CHILD_FIRST $mode */ public function __construct($it, int $flags = self::BYPASS_KEY, int $cit_flags = self::CATCH_GET_CHILD, int $mode = self::SELF_FIRST) {} /** * @return string */ public function current() {} /** * @return void */ public function endChildren() {} /** * @return void */ public function endIteration() {} /** * @return string */ public function getEntry() {} /** * @return string */ public function getPostfix() {} /** * @return string */ public function getPrefix() {} /** * @return string */ public function key() {} /** * @return void */ public function next() {} /** * @return void */ public function nextElement() {} /** * @return void */ public function rewind() {} /** * @return void */ public function setPostfix(string $postfix ) {} /** * @param self::PREFIX_* $part * @param string $value * @return void */ public function setPrefixPart(int $part , string $value ) {} /** * @return bool */ public function valid() {} } /** * @template TKey * @template TValue * @template TIterator as Iterator * * @template-extends FilterIterator */ class RegexIterator extends FilterIterator { const MATCH = 0 ; const GET_MATCH = 1 ; const ALL_MATCHES = 2 ; const SPLIT = 3 ; const REPLACE = 4 ; const USE_KEY = 1 ; /** * @param TIterator $iterator * @param string $regex * @param self::MATCH|self::GET_MATCH|self::ALL_MATCHES|self::SPLIT|self::REPLACE $mode * @param int-mask $flags * @param int $preg_flags */ public function __construct(Iterator $iterator, string $regex, int $mode = self::MATCH, int $flags = 0, int $preg_flags = 0) {} /** * @return TValue Can return any type. */ public function current() {} /** * @return TKey scalar on success, or null on failure. */ public function key() {} } $name */ class ReflectionClass implements Reflector { /** * @var class-string */ public $name; /** * @param T|class-string|interface-string|trait-string|enum-string $argument * @psalm-pure */ public function __construct($argument) {} /** * @return class-string * @psalm-pure */ public function getName(): string {} /** @psalm-pure */ public function isInternal(): bool {} /** @psalm-pure */ public function isUserDefined(): bool {} /** @psalm-pure */ public function isInstantiable(): bool {} /** @psalm-pure */ public function isCloneable(): bool {} /** * @return non-empty-string|false * @psalm-pure */ public function getFileName() {} /** * @return positive-int|false * @psalm-pure */ public function getStartLine() {} /** * @return positive-int|false * @psalm-pure */ public function getEndLine() {} /** * @return non-empty-string|false * @psalm-pure */ public function getDocComment() {} /** @psalm-pure */ public function getConstructor(): ?ReflectionMethod {} /** @psalm-pure */ public function hasMethod(string $name): bool {} /** * @psalm-pure * @throws ReflectionException */ public function getMethod(string $name): ReflectionMethod {} /** * @param int-mask-of|null $filter * @return list * @psalm-pure */ public function getMethods(?int $filter = null): array {} /** * @psalm-pure * @throws ReflectionException */ public function hasProperty(string $name): bool {} /** * @psalm-pure * @throws ReflectionException */ public function getProperty(string $name): ReflectionProperty {} /** * @param int-mask-of|null $filter * @return list * * @psalm-pure */ public function getProperties(?int $filter = null): array {} /** * @psalm-pure */ public function hasConstant(string $name): bool {} /** * @return mixed * * @psalm-pure * @throws ReflectionException */ public function getConstant(string $name) {} /** * @return ReflectionClassConstant|false * * @psalm-pure * @throws ReflectionException */ public function getReflectionConstant(string $name) {} /** * @param int-mask-of|null $filter * @return array * * @psalm-pure */ public function getConstants(?int $filter = null): array {} /** * @param int-mask-of|null $filter * @return list * * @psalm-pure */ public function getReflectionConstants(?int $filter = null): array {} /** * @return array * @psalm-pure */ public function getInterfaces(): array {} /** * @return list * @psalm-pure */ public function getInterfaceNames(): array {} /** @psalm-pure */ public function isInterface(): bool {} /** * @return array * * @psalm-pure */ public function getTraits(): array {} /** * @return array * * @psalm-pure */ public function getTraitAliases(): array {} /** @psalm-pure */ public function isTrait(): bool {} /** @psalm-pure */ public function isAbstract(): bool {} /** @psalm-pure */ public function isFinal(): bool {} /** * @return int-mask-of * @psalm-pure */ public function getModifiers(): int {} /** * @template J as object * @param J $object * @psalm-assert-if-true T&J $object * @psalm-pure */ public function isInstance(object $object): bool {} /** * @param mixed ...$args * * @return T */ public function newInstance(...$args): object {} /** * @param list $args * * @return T */ public function newInstanceArgs(array $args): object {} /** * @return T */ public function newInstanceWithoutConstructor(): object {} /** * @psalm-pure * * @return ReflectionClass|false */ public function getParentClass() {} /** * @template J as object * @param self|class-string $class * @psalm-assert-if-true self $this * @psalm-pure */ public function isSubclassOf($class): bool {} /** @return array */ public function getStaticProperties(): array {} /** * @return array * * @psalm-pure */ public function getDefaultProperties(): array {} /** @psalm-pure */ public function isIterateable(): bool {} /** @psalm-pure */ public function isIterable(): bool {} /** * @template J as object * @param self|interface-string $interface * @psalm-assert-if-true self $this * @psalm-pure */ public function implementsInterface($interface): bool {} /** @psalm-pure */ public function getExtension(): ?ReflectionExtension {} /** * @return non-empty-string|false * * @psalm-pure */ public function getExtensionName() {} /** @psalm-pure */ public function inNamespace(): bool {} /** @psalm-pure */ public function getNamespaceName(): string {} /** * @return non-empty-string * * @psalm-pure */ public function getShortName(): string {} /** * @return list * @psalm-pure */ public function getTraitNames(): array {} /** * @since 8.0 * @template TClass as object * @param class-string|null $name * @return ($name is null ? list> : list>) * @psalm-pure */ public function getAttributes(?string $name = null, int $flags = 0): array {} } abstract class ReflectionFunctionAbstract implements Reflector { /** @psalm-pure */ public function inNamespace(): bool {} /** @psalm-pure */ public function isClosure(): bool {} /** @psalm-pure */ public function isDeprecated(): bool {} /** @psalm-pure */ public function isInternal(): bool {} /** @psalm-pure */ public function isUserDefined(): bool {} public function getClosureThis(): ?object {} /** @psalm-pure */ public function getClosureScopeClass(): ?ReflectionClass {} /** @psalm-pure */ public function getClosureCalledClass(): ?ReflectionClass {} /** * @return non-empty-string|false * * @psalm-pure */ public function getDocComment() {} /** * @return positive-int|false * * @psalm-pure */ public function getStartLine() {} /** * @return positive-int|false * * @psalm-pure */ public function getEndLine() {} /** @psalm-pure */ public function getExtension(): ?ReflectionExtension {} /** * @return non-empty-string|false * * @psalm-pure */ public function getExtensionName() {} /** * @return non-empty-string|false * * @psalm-pure */ public function getFileName() {} /** * @return non-empty-string * * @psalm-pure */ public function getName(): string {} /** @psalm-pure */ public function getNamespaceName(): string {} /** * @return positive-int|0 * * @psalm-pure */ public function getNumberOfParameters(): int {} /** * @return positive-int|0 * * @psalm-pure */ public function getNumberOfRequiredParameters(): int {} /** * @return list * * @psalm-pure */ public function getParameters(): array {} /** * @psalm-assert-if-true ReflectionType $this->getReturnType() * * @psalm-pure */ public function hasReturnType(): bool {} /** @psalm-pure */ public function getReturnType(): ?ReflectionType {} /** * @return non-empty-string * * @psalm-pure */ public function getShortName(): string {} /** @psalm-pure */ public function returnsReference(): bool {} /** @psalm-pure */ public function isGenerator(): bool {} /** @psalm-pure */ public function isVariadic(): bool {} /** @psalm-pure */ public function isDisabled(): bool {} /** @psalm-pure */ public function getClosure(): Closure {} /** * @since 8.0 * @template TClass as object * @param class-string|null $name * @return ($name is null ? array> : array>) */ public function getAttributes(?string $name = null, int $flags = 0): array {} } class ReflectionFunction extends ReflectionFunctionAbstract { /** * @param callable-string|Closure $function * * @psalm-pure */ public function __construct(callable $function) {} /** * @return non-empty-string * * @psalm-pure */ public function __toString(): string {} } class ReflectionProperty implements Reflector { /** * @var string * @readonly */ public $name; /** * @var class-string * @readonly */ public $class; /** * @return non-empty-string * * @psalm-pure */ public function getName(): string {} /** * @since 8.0 * @template TClass as object * @param class-string|null $name * @return ($name is null ? array> : array>) */ public function getAttributes(?string $name = null, int $flags = 0): array {} /** * @since 7.4 * @psalm-assert-if-true ReflectionType $this->getType() * @psalm-pure */ public function hasType() : bool {} /** * @since 7.4 * @psalm-pure */ public function getType() : ?ReflectionType {} /** @psalm-pure */ public function isPublic(): bool {} /** @psalm-pure */ public function isPrivate(): bool {} /** @psalm-pure */ public function isProtected(): bool {} /** @psalm-pure */ public function isStatic(): bool {} /** @psalm-pure */ public function isDefault(): bool {} /** * @return int-mask-of * @psalm-pure */ public function getModifiers(): int {} /** @psalm-pure */ public function getDeclaringClass(): ReflectionClass {} /** * @return non-empty-string|false * * @psalm-pure */ public function getDocComment() {} /** * @since 8.0 * @psalm-pure */ public function hasDefaultValue(): bool {} /** * @return mixed * * @psalm-pure */ public function getDefaultValue() {} /** * @since 8.0 * @psalm-pure */ public function isPromoted(): bool {} /** * @since 8.1 * @psalm-pure */ public function isReadOnly(): bool {} } class ReflectionMethod extends ReflectionFunctionAbstract { /** * @var string * @readonly */ public $name; /** * @var class-string * @readonly */ public $class; /** @psalm-pure */ public function isStatic(): bool {} /** @psalm-pure */ public function isConstructor(): bool {} /** @psalm-pure */ public function isDestructor(): bool {} /** * @return int-mask-of * @psalm-pure */ public function getModifiers(): int {} /** @psalm-pure */ public function getDeclaringClass(): ReflectionClass {} /** @psalm-pure */ public function getPrototype(): ReflectionMethod {} } /** @psalm-immutable */ class ReflectionClassConstant implements Reflector { /** * @var non-empty-string * @readonly */ public $name; /** * @var class-string * @readonly */ public $class; /** * @var bool * @since 8.1 * @readonly */ public $isFinal; /** * @since 8.0 * @template TClass as object * @param class-string|null $name * @return ($name is null ? array> : array>) */ public function getAttributes(?string $name = null, int $flags = 0): array {} /** @return non-empty-string */ public function getName(): string {} /** @return int-mask-of */ public function getModifiers(): int {} /** @return non-empty-string|false */ public function getDocComment() {} } /** @psalm-immutable */ class ReflectionParameter implements Reflector { /** * @var non-empty-string * @readonly */ public $name; /** @return non-empty-string */ public function getName(): string {} /** * @psalm-assert-if-true ReflectionType $this->getType() */ public function hasType() : bool {} public function getType() : ?ReflectionType {} /** * @since 8.0 * @template TClass as object * @param class-string|null $name * @return ($name is null ? array> : array>) */ public function getAttributes(?string $name = null, int $flags = 0): array {} /** * @since 8.0 */ public function isPromoted(): bool {} /** * @psalm-assert-if-true string $this->getDefaultValueConstantName() */ public function isDefaultValueConstant(): bool {} public function getDefaultValueConstantName(): ?string {} } /** @psalm-immutable */ abstract class ReflectionType { } /** @psalm-immutable */ class ReflectionNamedType extends ReflectionType { /** @return non-empty-string */ public function getName(): string {} /** * @psalm-assert-if-false class-string|'self'|'static' $this->getName() */ public function isBuiltin(): bool {} /** @return non-empty-string */ public function __toString(): string {} } * @template-implements ArrayAccess */ class SplDoublyLinkedList implements Iterator, Countable, ArrayAccess, Serializable { public function __construct() {} /** * Add/insert a new value at the specified index * * @param int $index The index where the new value is to be inserted. * @param TValue $newval The new value for the index. * @return void * * @link https://php.net/spldoublylinkedlist.add * @since 5.5.0 */ public function add($index, $newval) {} /** * Pops a node from the end of the doubly linked list * @link https://php.net/manual/en/spldoublylinkedlist.pop.php * * @return TValue The value of the popped node. * * @since 5.3.0 */ public function pop() {} /** * Shifts a node from the beginning of the doubly linked list * @link https://php.net/manual/en/spldoublylinkedlist.shift.php * * @return TValue The value of the shifted node. * * @since 5.3.0 */ public function shift() {} /** * Pushes an element at the end of the doubly linked list * @link https://php.net/manual/en/spldoublylinkedlist.push.php * * @param TValue $value The value to push. * @return void * * @since 5.3.0 */ public function push($value) {} /** * Prepends the doubly linked list with an element * @link https://php.net/manual/en/spldoublylinkedlist.unshift.php * * @param TValue $value The value to unshift. * @return void * * @since 5.3.0 */ public function unshift($value) {} /** * Peeks at the node from the end of the doubly linked list * @link https://php.net/manual/en/spldoublylinkedlist.top.php * * @return TValue The value of the last node. * * @since 5.3.0 */ public function top() {} /** * Peeks at the node from the beginning of the doubly linked list * @link https://php.net/manual/en/spldoublylinkedlist.bottom.php * * @return TValue The value of the first node. * * @since 5.3.0 */ public function bottom() {} /** * Counts the number of elements in the doubly linked list. * @link https://php.net/manual/en/spldoublylinkedlist.count.php * * @return int the number of elements in the doubly linked list. * * @since 5.3.0 */ public function count() {} /** * Checks whether the doubly linked list is empty. * @link https://php.net/manual/en/spldoublylinkedlist.isempty.php * * @return bool whether the doubly linked list is empty. * * @since 5.3.0 */ public function isEmpty() {} /** * Returns whether the requested $index exists * @link https://php.net/manual/en/spldoublylinkedlist.offsetexists.php * * @param int $index The index being checked. * @return bool true if the requested index exists, otherwise false * * @since 5.3.0 */ public function offsetExists($index) {} /** * Returns the value at the specified $index * @link https://php.net/manual/en/spldoublylinkedlist.offsetget.php * * @param int $index The index with the value. * @return TValue The value at the specified index. * * @since 5.3.0 */ public function offsetGet($index) {} /** * Sets the value at the specified $index to $newval * @link https://php.net/manual/en/spldoublylinkedlist.offsetset.php * * @param int $index The index being set. * @param TValue $newval The new value for the index. * @return void * * @since 5.3.0 */ public function offsetSet($index, $newval) {} /** * Unsets the value at the specified $index * @link https://php.net/manual/en/spldoublylinkedlist.offsetunset.php * * @param int $index The index being unset. * @return void * * @since 5.3.0 */ public function offsetUnset($index) {} /** * Return current array entry * @link https://php.net/manual/en/spldoublylinkedlist.current.php * * @return TValue The current node value. * * @since 5.3.0 */ public function current() {} /** * Return current node index * @link https://php.net/manual/en/spldoublylinkedlist.key.php * * @return int The current node index. * * @since 5.3.0 */ public function key() {} } /** * The SplFixedArray class provides the main functionalities of array. * The main differences between a SplFixedArray and a normal PHP array is that * the SplFixedArray is of fixed length and allows only integers within the range as indexes. * The advantage is that it uses less memory than a standard array. * * @link https://php.net/manual/en/class.splfixedarray.php * * @template TValue * @template-implements ArrayAccess * @template-implements Iterator */ class SplFixedArray implements Iterator, ArrayAccess, Countable { /** * Constructs a new fixed array * * Initializes a fixed array with a number of NULL values equal to size. * @link https://php.net/manual/en/splfixedarray.construct.php * * @param int $size The size of the fixed array. This expects a number between 0 and PHP_INT_MAX. * @since 5.3.0 */ public function __construct(int $size = 0) {} /** * Import a PHP array in a new SplFixedArray instance * @link https://php.net/manual/en/splfixedarray.fromarray.php * * @template TInValue * @param array $array The array to import * @param bool $save_indexes [optional] Try to save the numeric indexes used in the original array. * * @return SplFixedArray Instance of SplFixedArray containing the array content * @since 5.3.0 */ public static function fromArray(array $array, bool $save_indexes = true): SplFixedArray {} /** * Returns a PHP array from the fixed array * @link https://php.net/manual/en/splfixedarray.toarray.php * * @return array * @since 5.3.0 */ public function toArray(): array {} /** * Returns the size of the array. * @link https://php.net/manual/en/splfixedarray.getsize.php * * @return int The size of the array * @see SplFixedArray::count() * * @since 5.3.0 */ public function getSize(): int {} /** * Returns the size of the array. * @link https://php.net/manual/en/splfixedarray.count.php * * @return int The size of the array * * @since 5.3.0 */ public function count(): int {} /** * Rewind the iterator back to the start * @link https://php.net/manual/en/splfixedarray.rewind.php * * @return void * * @since 5.3.0 */ public function rewind(): void {} /** * Check whether the array contains more elements * @link https://php.net/manual/en/splfixedarray.valid.php * * @return bool true if the array contains any more elements, false otherwise. * * @since 5.3.0 */ public function valid(): bool {} /** * Returns current array index * @link https://php.net/manual/en/splfixedarray.key.php * * @return int The current array index * * @since 5.3.0 */ public function key(): int {} /** * Returns the current array entry * @link https://php.net/manual/en/splfixedarray.current.php * * @return TValue The current element value * * @since 5.3.0 */ public function current() {} /** * Move to the next entry * @link https://php.net/manual/en/splfixedarray.next.php * * @return void * * @since 5.3.0 */ public function next(): void {} /** * Returns whether the specified index exists * @link https://php.net/manual/en/splfixedarray.offsetexists.php * * @param int $index The index being checked. * @return bool true if the requested index exists, and false otherwise. * * @since 5.3.0 */ public function offsetExists(int $index): bool {} /** * Sets a new value at a specified index * @link https://php.net/manual/en/splfixedarray.offsetset.php * * @param int $index The index being sent. * @param TValue $newval The new value for the index * @return void * * @since 5.3.0 */ public function offsetSet(int $index, $newval): void {} /** * Unsets the value at the specified $index * @link https://php.net/manual/en/splfixedarray.offsetunset.php * * @param int $index The index being unset * @return void * * @since 5.3.0 */ public function offsetUnset(int $index): void {} /** * Returns the value at the specified index * @link https://php.net/manual/en/splfixedarray.offsetget.php * * @param int $index The index with the value * @return TValue The value at the specified index * * @since 5.3.0 */ public function offsetGet(int $index) {} } /** * The SplStack class provides the main functionalities of a stack implemented using a doubly linked list. * @link https://php.net/manual/en/class.splstack.php * * @template TValue * @template-extends SplDoublyLinkedList */ class SplStack extends SplDoublyLinkedList { } /** * The SplQueue class provides the main functionalities of a queue implemented using a doubly linked list. * @link https://php.net/manual/en/class.splqueue.php * * @template TValue * @template-extends SplDoublyLinkedList */ class SplQueue extends SplDoublyLinkedList { /** * Adds an element to the queue. * @link https://php.net/manual/en/splqueue.enqueue.php * * @param TValue $value The value to enqueue. * @return void * * @since 5.3.0 */ public function enqueue($value) {} /** * Dequeues a node from the queue * @link https://php.net/manual/en/splqueue.dequeue.php * * @return TValue The value of the dequeued node. * * @since 5.3.0 */ public function dequeue() {} } /** * The SplHeap class provides the main functionalities of a Heap. * @link https://php.net/manual/en/class.splheap.php * * @template TValue * @template-implements Iterator */ abstract class SplHeap implements Iterator, Countable { public function __construct() {} /** * Compare elements in order to place them correctly in the heap while sifting up * @link https://php.net/manual/en/splheap.compare.php * * @param TValue $value1 The value of the first node being compared. * @param TValue $value2 The value of the second node being compared. * @return int Positive integer if value1 is greater than value2, 0 if they are equal, negative integer otherwise. * * @since 5.3.0 */ protected abstract function compare($value1, $value2): int; /** * Counts the number of elements in the heap * @link https://php.net/manual/en/splheap.count.php * * @return int The number of elements in the heap. * * @since 5.3.0 */ public function count(): int {} /** * Get the current datastructure node. * @link https://php.net/manual/en/splheap.current.php * * @return TValue The current node value * * @since 5.3.0 */ public function current() {} /** * Extracts a node from top of the heap and sift up * @link https://php.net/manual/en/splheap.extract.php * * @return TValue The current node value * * @since 5.3.0 */ public function extract() {} /** * Inserts an element in the heap by sifting it up * @link https://php.net/manual/en/splheap.insert.php * * @param TValue $value The value to insert. * @return void * * @since 5.3.0 */ public function insert($value): void {} /** * Tells if the heap is in a corrupted state * @link https://php.net/manual/en/splheap.isCorrupted.php * * @return bool true if the heap is corrupted, false otherwise. * * @since 7.0.0 */ public function isCorrupted(): bool {} /** * Checks whether the heap is empty * @link https://php.net/manual/en/splheap.isEmpty.php * * @return bool Whether the heap is empty * * @since 5.3.0 */ public function isEmpty(): bool {} /** * Return current node index * @link https://php.net/manual/en/splheap.key.php * * @return int The current node index * * @since 5.3.0 */ public function key() {} /** * Move to the next node. This will delete the top node of the heap. * @link https://php.net/manual/en/splheap.next.php * * @return void * * @since 5.3.0 */ public function next(): void {} /** * Recover from the corrupted state and allow further actions on the heap * @link https://php.net/manual/en/splheap.recoverFromCorruption.php * * @return void * * @since 5.3.0 */ public function recoverFromCorruption(): void {} /** * Rewind iterator back to the start (no-op) * @link https://php.net/manual/en/splheap.rewind.php * * @return void * * @since 5.3.0 */ public function rewind(): void {} /** * Peeks at the node from the top of the heap * @link https://php.net/manual/en/splheap.top.php * * @return TValue The value of the node on the top. * * @since 5.3.0 */ public function top() {} /** * Check whether the heap contains any more nodes * @link https://php.net/manual/en/splheap.valid.php * * @return bool Returns true if the heap contains any more nodes, false otherwise. * * @since 5.3.0 */ public function valid(): bool {} } /** * The SplMaxHeap class provides the main functionalities of a heap, keeping the maximum on the top. * @link https://php.net/manual/en/class.splmaxheap.php * * @template TValue * @template-extends SplHeap */ class SplMaxHeap extends SplHeap { } /** * The SplMinHeap class provides the main functionalities of a heap, keeping the maximum on the top. * @link https://php.net/manual/en/class.splminheap.php * * @template TValue * @template-extends SplHeap */ class SplMinHeap extends SplHeap { } /** * The SplPriorityQueue class provides the main functionalities of a prioritized queue, implemented using a max heap. * @link https://php.net/manual/en/class.splpriorityqueue.php * * @template TPriority * @template TValue * @template-implements Iterator */ class SplPriorityQueue implements Iterator, Countable { /** * Extract the data */ const EXTR_DATA = 0x00000001; /** * Extract the priority */ const EXTR_PRIORITY = 0x00000002; /** * Extract an array containing both */ const EXTR_BOTH = 0x00000003; public function __construct() {} /** * Compare priorities in order to place them correctly in the queue while sifting up * @link https://php.net/manual/en/splpriorityqueue.compare.php * * @param TValue $priority1 The priority of the first node being compared. * @param TValue $priority2 The priority of the second node being compared. * @return int Positive integer if priority1 is greater than priority2, 0 if they are equal, negative integer otherwise. * * @since 5.3.0 */ public function compare($priority1, $priority2): int {} /** * Counts the number of elements in the queue * @link https://php.net/manual/en/splpriorityqueue.count.php * * @return int The number of elements in the queue. * * @since 5.3.0 */ public function count(): int {} /** * Get the current datastructure node. * @link https://php.net/manual/en/splpriorityqueue.current.php * * @return TValue The current node value * * @since 5.3.0 */ public function current() {} /** * Extracts a node from top of the queue and sift up * @link https://php.net/manual/en/splpriorityqueue.extract.php * * @return TValue The current node value * * @since 5.3.0 */ public function extract() {} /** * Get the flags of extraction * @link https://php.net/manual/en/splpriorityqueue.getextractflags.php * * @return SplPriorityQueue::EXTR_* Returns the current extraction mode * * @see SplPriorityQueue::setExtractFlags * * @since 5.3.0 */ public function getExtractFlags(): int {} /** * Inserts an element in the queue by sifting it up * @link https://php.net/manual/en/splpriorityqueue.insert.php * * @param TValue $value The value to insert. * @param TPriority $priority The associated priority. * @return true * * @since 5.3.0 */ public function insert($value, $priority): bool {} /** * Tells if the queue is in a corrupted state * @link https://php.net/manual/en/splpriorityqueue.isCorrupted.php * * @return bool true if the queue is corrupted, false otherwise. * * @since 7.0.0 */ public function isCorrupted(): bool {} /** * Checks whether the queue is empty * @link https://php.net/manual/en/splpriorityqueue.isEmpty.php * * @return bool Whether the queue is empty * * @since 5.3.0 */ public function isEmpty(): bool {} /** * Return current node index * @link https://php.net/manual/en/splpriorityqueue.key.php * * @return int The current node index * * @since 5.3.0 */ public function key() {} /** * Move to the next node. * @link https://php.net/manual/en/splpriorityqueue.next.php * * @return void * * @since 5.3.0 */ public function next(): void {} /** * Recover from the corrupted state and allow further actions on the queue * @link https://php.net/manual/en/splpriorityqueue.recoverFromCorruption.php * * @return void * * @since 5.3.0 */ public function recoverFromCorruption(): void {} /** * Rewind iterator back to the start (no-op) * @link https://php.net/manual/en/splpriorityqueue.rewind.php * * @return void * * @since 5.3.0 */ public function rewind(): void {} /** * Sets the mode of extraction * @link https://php.net/manual/en/splpriorityqueue.setextractflags.php * * @param SplPriorityQueue::EXTR_* $flags Defines what is extracted by SplPriorityQueue::current(), SplPriorityQueue::top() and SplPriorityQueue::extract(). * * @return void * * @since 5.3.0 */ public function setExtractFlags(int $flags): void {} /** * Peeks at the node from the top of the queue * @link https://php.net/manual/en/splpriorityqueue.top.php * * @return TValue The value of the node on the top. * * @since 5.3.0 */ public function top() {} /** * Check whether the queue contains any more nodes * @link https://php.net/manual/en/splpriorityqueue.valid.php * * @return bool Returns true if the queue contains any more nodes, false otherwise. * * @since 5.3.0 */ public function valid(): bool {} } /** * The SplObjectStorage class provides a map from objects to data or, by * ignoring data, an object set. This dual purpose can be useful in many * cases involving the need to uniquely identify objects. * @link https://php.net/manual/en/class.splobjectstorage.php * * @template TObject as object * @template TArrayValue * @template-implements ArrayAccess * @template-implements Iterator */ class SplObjectStorage implements Countable, Iterator, Serializable, ArrayAccess { public function __construct() {} /** * Adds an object in the storage * @link https://php.net/manual/en/splobjectstorage.attach.php * * @param TObject $object The object to add. * @param TArrayValue|null $data [optional] The data to associate with the object. * @return void * * @since 5.1.0 */ public function attach($object, $data = null) {} /** * Removes an object from the storage * @link https://php.net/manual/en/splobjectstorage.detach.php * * @param TObject $object The object to remove. * @return void * * @since 5.1.0 */ public function detach($object) {} /** * Checks if the storage contains a specific object * @link https://php.net/manual/en/splobjectstorage.contains.php * * @param TObject $object The object to look for. * @return bool true if the object is in the storage, false otherwise. * * @since 5.1.0 */ public function contains($object) {} /** * Adds all objects from another storage * @link https://php.net/manual/en/splobjectstorage.addall.php * * @param SplObjectStorage $storage The storage you want to import. * @return void * * @since 5.3.0 */ public function addAll($storage) {} /** * Removes objects contained in another storage from the current storage * @link https://php.net/manual/en/splobjectstorage.removeall.php * * @param SplObjectStorage $storage The storage containing the elements to remove. * @return void * * @since 5.3.0 */ public function removeAll($storage) {} /** * Removes all objects except for those contained in another storage from the current storage * @link https://php.net/manual/en/splobjectstorage.removeallexcept.php * * @param SplObjectStorage $storage The storage containing the elements to retain in the current storage. * @return void * * @since 5.3.6 */ public function removeAllExcept($storage) {} /** * Returns the data associated with the current iterator entry * @link https://php.net/manual/en/splobjectstorage.getinfo.php * * @return TArrayValue The data associated with the current iterator position. * * @since 5.3.0 */ public function getInfo() {} /** * Sets the data associated with the current iterator entry * @link https://php.net/manual/en/splobjectstorage.setinfo.php * * @param TArrayValue $data The data to associate with the current iterator entry. * @return void * * @since 5.3.0 */ public function setInfo($data) {} /** * Returns the number of objects in the storage * @link https://php.net/manual/en/splobjectstorage.count.php * * @return int The number of objects in the storage. * * @since 5.1.0 */ public function count() {} /** * Rewind the iterator to the first storage element * @link https://php.net/manual/en/splobjectstorage.rewind.php * * @return void * * @since 5.1.0 */ public function rewind() {} /** * Returns if the current iterator entry is valid * @link https://php.net/manual/en/splobjectstorage.valid.php * * @return bool true if the iterator entry is valid, false otherwise. * * @since 5.1.0 */ public function valid() {} /** * Returns the index at which the iterator currently is * @link https://php.net/manual/en/splobjectstorage.key.php * * @return int The index corresponding to the position of the iterator. * * @since 5.1.0 */ public function key() {} /** * Returns the current storage entry * @link https://php.net/manual/en/splobjectstorage.current.php * * @return TObject The object at the current iterator position. * * @since 5.1.0 */ public function current() {} /** * Move to the next entry * @link https://php.net/manual/en/splobjectstorage.next.php * * @return void * * @since 5.1.0 */ public function next() {} /** * Unserializes a storage from its string representation * @link https://php.net/manual/en/splobjectstorage.unserialize.php * * @param string $serialized The serialized representation of a storage. * @return void * * @since 5.2.2 */ public function unserialize($serialized) {} /** * Serializes the storage * @link https://php.net/manual/en/splobjectstorage.serialize.php * * @return string A string representing the storage. * * @since 5.2.2 */ public function serialize() {} /** * Checks whether an object exists in the storage * @link https://php.net/manual/en/splobjectstorage.offsetexists.php * * @param TObject $object The object to look for. * @return bool true if the object exists in the storage, and false otherwise. * * @since 5.3.0 */ public function offsetExists($object) {} /** * Associates data to an object in the storage * @link https://php.net/manual/en/splobjectstorage.offsetset.php * * @param TObject $object The object to associate data with. * @param TArrayValue|null $data [optional] The data to associate with the object. * @return void * * @since 5.3.0 */ public function offsetSet($object, $data = null) {} /** * Removes an object from the storage * @link https://php.net/manual/en/splobjectstorage.offsetunset.php * * @param TObject $object The object to remove. * @return void * * @since 5.3.0 */ public function offsetUnset($object) {} /** * Returns the data associated with an object * @link https://php.net/manual/en/splobjectstorage.offsetget.php * * @param TObject $object The object to look for. * @return TArrayValue The data previously associated with the object in the storage. * * @since 5.3.0 */ public function offsetGet($object) {} /** * Calculate a unique identifier for the contained objects * @link https://php.net/manual/en/splobjectstorage.gethash.php * * @param object $object object whose identifier is to be calculated. * @return string A string with the calculated identifier. * * @since 5.4.0 */ public function getHash($object) {} } */ class Generator implements Traversable { /** * @psalm-ignore-nullable-return * @return ?TValue Can return any type. */ public function current() {} /** * @return void Any returned value is ignored. */ public function next() {} /** * @return TKey scalar on success, or null on failure. */ public function key() {} /** * @return bool The return value will be casted to boolean and then evaluated. */ public function valid() {} /** * @return void Any returned value is ignored. */ public function rewind() {} /** * @return TReturn Can return any type. */ public function getReturn() {} /** * @param TSend $value * @psalm-ignore-nullable-return * @return ?TValue Can return any type. */ public function send($value) {} /** * @psalm-ignore-nullable-return * @return ?TValue Can return any type. */ public function throw(Throwable $exception) {} } /** * Interface to provide accessing objects as arrays. * @link http://php.net/manual/en/class.arrayaccess.php * * @template TKey * @template TValue */ interface ArrayAccess { /** * Whether a offset exists * @link http://php.net/manual/en/arrayaccess.offsetexists.php * * @param TKey $offset An offset to check for. * @return bool true on success or false on failure. * The return value will be casted to boolean if non-boolean was returned. * * @since 5.0.0 */ public function offsetExists($offset); /** * Offset to retrieve * @link http://php.net/manual/en/arrayaccess.offsetget.php * * @param TKey $offset The offset to retrieve. * @return TValue|null Can return all value types. * @psalm-ignore-nullable-return * * @since 5.0.0 */ public function offsetGet($offset); /** * Offset to set * @link http://php.net/manual/en/arrayaccess.offsetset.php * * @param TKey|null $offset The offset to assign the value to. * @param TValue $value The value to set. * @return void * * @since 5.0.0 */ public function offsetSet($offset, $value); /** * Offset to unset * @link http://php.net/manual/en/arrayaccess.offsetunset.php * * @param TKey $offset The offset to unset. * @return void * * @since 5.0.0 */ public function offsetUnset($offset); } /** * This class allows objects to work as arrays. * @link http://php.net/manual/en/class.arrayobject.php * * @template TKey * @template TValue * @template-implements IteratorAggregate * @template-implements ArrayAccess */ class ArrayObject implements IteratorAggregate, ArrayAccess, Serializable, Countable { /** * Properties of the object have their normal functionality when accessed as list (var_dump, foreach, etc.). */ const STD_PROP_LIST = 1; /** * Entries can be accessed as properties (read and write). */ const ARRAY_AS_PROPS = 2; /** * Construct a new array object * @link http://php.net/manual/en/arrayobject.construct.php * * @param array|object $input The input parameter accepts an array or an Object. * @param int $flags Flags to control the behaviour of the ArrayObject object. * @param string $iterator_class Specify the class that will be used for iteration of the ArrayObject object. ArrayIterator is the default class used. * @psalm-param class-string>|class-string> $iterator_class * * @since 5.0.0 */ public function __construct($input = null, $flags = 0, $iterator_class = "ArrayIterator") { } /** * Returns whether the requested index exists * @link http://php.net/manual/en/arrayobject.offsetexists.php * * @param TKey $index The index being checked. * @return bool true if the requested index exists, otherwise false * * @since 5.0.0 */ public function offsetExists($index) { } /** * Returns the value at the specified index * @link http://php.net/manual/en/arrayobject.offsetget.php * * @param TKey $index The index with the value. * @return TValue The value at the specified index or false. * * @since 5.0.0 */ public function offsetGet($index) { } /** * Sets the value at the specified index to newval * @link http://php.net/manual/en/arrayobject.offsetset.php * * @param TKey $index The index being set. * @param TValue $newval The new value for the index. * @return void * * @since 5.0.0 */ public function offsetSet($index, $newval) { } /** * Unsets the value at the specified index * @link http://php.net/manual/en/arrayobject.offsetunset.php * * @param TKey $index The index being unset. * @return void * * @since 5.0.0 */ public function offsetUnset($index) { } /** * Appends the value * @link http://php.net/manual/en/arrayobject.append.php * * @param TValue $value The value being appended. * @return void * * @since 5.0.0 */ public function append($value) { } /** * Creates a copy of the ArrayObject. * @link http://php.net/manual/en/arrayobject.getarraycopy.php * * @return array a copy of the array. When the ArrayObject refers to an object * an array of the public properties of that object will be returned. * * @since 5.0.0 */ public function getArrayCopy() { } /** * Get the number of public properties in the ArrayObject * When the ArrayObject is constructed from an array all properties are public. * @link http://php.net/manual/en/arrayobject.count.php * * @return int The number of public properties in the ArrayObject. * * @since 5.0.0 */ public function count() { } /** * Gets the behavior flags. * @link http://php.net/manual/en/arrayobject.getflags.php * * @return int the behavior flags of the ArrayObject. * * @since 5.1.0 */ public function getFlags() { } /** * Sets the behavior flags. * * It takes on either a bitmask, or named constants. Using named * constants is strongly encouraged to ensure compatibility for future * versions. * * The available behavior flags are listed below. The actual * meanings of these flags are described in the * predefined constants. * * * ArrayObject behavior flags * * * * * * * * * * * * *
valueconstant
1 * ArrayObject::STD_PROP_LIST *
2 * ArrayObject::ARRAY_AS_PROPS *
* * @link http://php.net/manual/en/arrayobject.setflags.php * * @param int $flags The new ArrayObject behavior. * @return void * * @since 5.1.0 */ public function setFlags($flags) { } /** * Sort the entries by value * @link http://php.net/manual/en/arrayobject.asort.php * * @return void * * @since 5.2.0 */ public function asort() { } /** * Sort the entries by key * @link http://php.net/manual/en/arrayobject.ksort.php * * @return void * * @since 5.2.0 */ public function ksort() { } /** * Sort the entries with a user-defined comparison function and maintain key association * @link http://php.net/manual/en/arrayobject.uasort.php * * Function cmp_function should accept two * parameters which will be filled by pairs of entries. * The comparison function must return an integer less than, equal * to, or greater than zero if the first argument is considered to * be respectively less than, equal to, or greater than the * second. * * @param callable(TValue, TValue):int $cmp_function * @return void * * @since 5.2.0 */ public function uasort($cmp_function) { } /** * Sort the entries by keys using a user-defined comparison function * @link http://php.net/manual/en/arrayobject.uksort.php * * Function cmp_function should accept two * parameters which will be filled by pairs of entry keys. * The comparison function must return an integer less than, equal * to, or greater than zero if the first argument is considered to * be respectively less than, equal to, or greater than the * second. * * @param callable(TKey, TKey):int $cmp_function The callable comparison function. * @return void * * @since 5.2.0 */ public function uksort($cmp_function) { } /** * Sort entries using a "natural order" algorithm * @link http://php.net/manual/en/arrayobject.natsort.php * * @return void * * @since 5.2.0 */ public function natsort() { } /** * Sort an array using a case insensitive "natural order" algorithm * @link http://php.net/manual/en/arrayobject.natcasesort.php * * @return void * * @since 5.2.0 */ public function natcasesort() { } /** * Unserialize an ArrayObject * @link http://php.net/manual/en/arrayobject.unserialize.php * * @param string $serialized The serialized ArrayObject * @return void The unserialized ArrayObject * * @since 5.3.0 */ public function unserialize($serialized) { } /** * Serialize an ArrayObject * @link http://php.net/manual/en/arrayobject.serialize.php * * @return string The serialized representation of the ArrayObject. * * @since 5.3.0 */ public function serialize() { } /** * Create a new iterator from an ArrayObject instance * @link http://php.net/manual/en/arrayobject.getiterator.php * * @return ArrayIterator An iterator from an ArrayObject. * * @since 5.0.0 */ public function getIterator() { } /** * Exchange the array for another one. * @link http://php.net/manual/en/arrayobject.exchangearray.php * * @param mixed $input The new array or object to exchange with the current array. * @return array the old array. * * @since 5.1.0 */ public function exchangeArray($input) { } /** * Sets the iterator classname for the ArrayObject. * @link http://php.net/manual/en/arrayobject.setiteratorclass.php * * @param string $iterator_class The classname of the array iterator to use when iterating over this object. * @psalm-param class-string>|class-string> $iterator_class * @return void * * @since 5.1.0 */ public function setIteratorClass($iterator_class) { } /** * Gets the iterator classname for the ArrayObject. * @link http://php.net/manual/en/arrayobject.getiteratorclass.php * * @return string the iterator class name that is used to iterate over this object. * @psalm-return class-string>|class-string> * * @since 5.1.0 */ public function getIteratorClass() { } } interface Serializable { /** * @return null|string */ public function serialize(); /** * @param string $data * @return void */ public function unserialize($data); } /** * @template-covariant T as object */ final class WeakReference { // always fail public function __construct() {} /** * @template TIn as object * @param TIn $object * @return WeakReference */ public static function create(object $object): WeakReference {} /** @return ?T */ public function get(): ?object {} } /** * @template TKey of object * @template TVal of mixed * @implements ArrayAccess * @implements IteratorAggregate * @implements Traversable * * @since 8.0.0 */ final class WeakMap implements ArrayAccess, Countable, IteratorAggregate, Traversable { /** * @param TKey $offset * @return bool */ public function offsetExists($offset) {} /** * @param TKey $offset * @return TVal|null * @psalm-ignore-nullable-return */ public function offsetGet($offset) {} /** * @param TKey $offset * @param TVal $value * @return void */ public function offsetSet($offset, $value) {} /** * @param TKey $offset * @return void */ public function offsetUnset($offset) {} } class mysqli { /** * @psalm-pure * * @psalm-taint-escape sql * @psalm-flow ($string) -> return */ function escape_string($string) {} /** * @psalm-pure * * @psalm-taint-escape sql * @psalm-flow ($string) -> return */ function real_escape_string($string) {} } class SQLite3 { /** * @psalm-pure * * @psalm-taint-escape sql * @psalm-flow ($string) -> return */ static function escapeString($string) {} } #[Attribute(Attribute::TARGET_METHOD)] final class ReturnTypeWillChange { public function __construct() {} } */ public static function cases(): array; } interface BackedEnum extends UnitEnum { /** @var non-empty-string $name */ public readonly string $name; public readonly int|string $value; /** * @psalm-pure */ public static function from(string|int $value): static; /** * @psalm-pure */ public static function tryFrom(string|int $value): ?static; /** * @psalm-pure * @return list */ public static function cases(): array; } class ReflectionClass implements Reflector { /** @psalm-pure */ public function isEnum(): bool {} } class ReflectionProperty implements Reflector { /** * Starting from PHP 8.1, this method is pure, and has no effect. * * @psalm-pure */ public function setAccessible(bool $accessible): void {} } class ReflectionMethod extends ReflectionFunctionAbstract { /** * Starting from PHP 8.1, this method is pure, and has no effect. * * @psalm-pure */ public function setAccessible(bool $accessible): void {} } /** @psalm-immutable */ class ReflectionEnum extends ReflectionClass implements Reflector { public function getBackingType(): ?ReflectionType; public function getCase(string $name): ReflectionEnumUnitCase; /** @return list */ public function getCases(): array; public function hasCase(string $name): bool; public function isBacked(): bool; } /** @psalm-immutable */ class ReflectionEnumUnitCase extends ReflectionClassConstant implements Reflector { public function getEnum(): ReflectionEnum; public function getValue(): UnitEnum; } /** @psalm-immutable */ class ReflectionEnumBackedCase extends ReflectionEnumUnitCase implements Reflector { public function getBackingValue(): int|string; } /** @psalm-immutable */ class ReflectionIntersectionType extends ReflectionType { /** @return non-empty-list */ public function getTypes(): array {} /** @return false */ public function allowsNull(): bool {} } } namespace FTP { final class Connection {} } namespace IMAP { final class Connection {} } namespace LDAP { final class Connection {} final class Result {} final class ResultEntry {} } namespace PgSql { final class Connection {} final class Result {} final class Lob {} } namespace PSpell { final class Config {} final class Dictionary {} } > : list>) * @psalm-pure */ function array_keys(array $array, $search_value = null, bool $strict = false) { } /** * @psalm-template TKey as array-key * @psalm-template TValue * * @param array $array * @param array ...$arrays * * @return array * @psalm-pure */ function array_intersect(array $array, array ...$arrays) { } /** * @psalm-template TKey as array-key * @psalm-template TValue * * @param array $array * @param array ...$arrays * * @return array * @psalm-pure */ function array_intersect_key(array $array, array ...$arrays) { } /** * @psalm-template TKey as array-key * @psalm-template TValue * * @param array $array * @param array ...$arrays * * @return array * @psalm-pure */ function array_intersect_assoc(array $array, array ...$arrays) { } /** * @psalm-template TKey as array-key * @psalm-template TValue * * @param array $keys * @param array $values * * @return ( * PHP_MAJOR_VERSION is 8 ? * ($keys is non-empty-array ? non-empty-array : array) : * ($keys is non-empty-array ? non-empty-array|false : array|false) * ) * @psalm-ignore-falsable-return * @psalm-pure */ function array_combine(array $keys, array $values) { } /** * @psalm-template TKey as array-key * @psalm-template TValue * * @param array $array * @param array ...$arrays * * @return array * @psalm-pure */ function array_diff(array $array, array ...$arrays) { } /** * @psalm-template TKey as array-key * @psalm-template TValue * * @param array $array * @param array ...$arrays * * @return array * @psalm-pure */ function array_diff_key(array $array, array ...$arrays) { } /** * @psalm-template TKey as array-key * @psalm-template TValue * * @param array $array * @param array ...$arrays * * @return array * @psalm-pure */ function array_diff_assoc(array $array, array ...$arrays) { } /** * @psalm-template TKey as array-key * @psalm-template TValue * * @param array $array * * @return array * @psalm-pure */ function array_flip(array $array) { } /** * @psalm-template TKey as array-key * @psalm-template TValue * @psalm-template TArray as array * * @param TArray $array * * @return (TArray is non-empty-array ? non-empty-array : array) * @psalm-pure */ function array_unique(array $array, int $flags = 0) { } /** * @psalm-template TKey as array-key * @psalm-template TArray as array * * @param TArray $array * * @return (TArray is array ? null : (TArray is non-empty-list ? int<0,max> : (TArray is non-empty-array ? TKey : TKey|null))) * @psalm-pure * @psalm-ignore-nullable-return */ function key($array) { } /** * @psalm-template TKey as array-key * @psalm-template TValue * @psalm-template TArray as array * * @param TArray $array * * @return (TArray is array ? false : (TArray is non-empty-array ? TValue : TValue|false)) * @psalm-pure */ function current($array) { } /** * @psalm-template TKey as array-key * @psalm-template TValue * @psalm-template TArray as array * * @param TArray $array * * @return (TArray is array ? false : (TArray is non-empty-array ? TValue : TValue|false)) */ function reset(&$array) { } /** * @psalm-template TKey as array-key * @psalm-template TValue * @psalm-template TArray as array * * @param TArray $array * * @return (TArray is array ? false : (TArray is non-empty-array ? TValue : TValue|false)) */ function end(&$array) { } /** * @psalm-template TKey as array-key * @psalm-template TArray as array * * @param TArray $array * * @return (TArray is array ? null : (TArray is non-empty-array ? key-of : key-of|null)) * @psalm-pure */ function array_key_first($array) { } /** * @psalm-template TArray as array * * @param TArray $array * * @return (TArray is array ? null : (TArray is non-empty-array ? key-of : key-of|null)) * @psalm-pure */ function array_key_last($array) { } /** * @psalm-template TArray as array * * @param TArray $array * * @return (TArray is non-empty-array ? non-empty-list> : list>) * @psalm-pure */ function array_values($array) { } /** * @psalm-template T * * @param mixed $needle * @param array $haystack * @param bool $strict * * @return T|false * @psalm-pure */ function array_search($needle, array $haystack, bool $strict = false) { } /** * @psalm-template T * @psalm-template TArray as array * * @param TArray $array * @param-out (TArray is non-empty-array ? non-empty-list : list) $array */ function shuffle(array &$array): bool { } /** * @psalm-template T * @psalm-template TArray as array * * @param TArray $array * @param-out (TArray is non-empty-array ? non-empty-list : list) $array */ function sort(array &$array, int $flags = SORT_REGULAR): bool { } /** * @psalm-template T * @psalm-template TArray as array * * @param TArray $array * @param-out (TArray is non-empty-array ? non-empty-list : list) $array */ function rsort(array &$array, int $flags = SORT_REGULAR): bool { } /** * @psalm-template T * @psalm-template TArray as array * * @param TArray $array * @param callable(T,T):int $callback * @param-out (TArray is non-empty-array ? non-empty-list : list) $array */ function usort(array &$array, callable $callback): bool { } /** * @psalm-template TKey * @psalm-template T * @psalm-template TArray as array * * @param TArray $array * @param callable(T,T):int $callback * @param-out (TArray is non-empty-array ? non-empty-array : array) $array */ function uasort(array &$array, callable $callback): bool { } /** * @psalm-template TKey * @psalm-template T * @psalm-template TArray as array * * @param TArray $array * @param callable(TKey,TKey):int $callback * @param-out (TArray is non-empty-array ? non-empty-array : array) $array */ function uksort(array &$array, callable $callback): bool { } /** * @psalm-pure * * @psalm-template K of array-key * @psalm-template T * * @param array $array * * @return array */ function array_change_key_case(array $array, int $case = CASE_LOWER) { } /** * @psalm-pure * * @psalm-template TKey as array-key * * @param TKey $key * @param array $array * * @return bool */ function array_key_exists($key, array $array) : bool { } /** * @psalm-pure * * @no-named-arguments * * @psalm-template TKey as array-key * @psalm-template TValue * * @param array ...$arrays * * @return array */ function array_merge_recursive(array ...$arrays) { } /** * @psalm-pure * * @no-named-arguments * * @psalm-template TKey as array-key * @psalm-template TValue * * @param array ...$arrays * * @return array */ function array_merge(array ...$arrays) { } /** * @psalm-pure * * @psalm-template TKey as array-key * @psalm-template TValue * * @param array $keys * @param TValue $value * * @return array */ function array_fill_keys(array $keys, $value): array { } /** * @psalm-pure * * @psalm-template TKey * * @param string $pattern * @param array $array * @param 0|1 $flags 1=PREG_GREP_INVERT * @return array */ function preg_grep($pattern, array $array, $flags = 0) { } /** * @param resource $stream * @param-out closed-resource $stream */ function fclose(&$stream) : bool { } /** * @psalm-pure * @template T as string * @param T $string * @return (T is non-empty-string ? non-empty-string : string) */ function sodium_bin2base64(string $string, int $id): string /** * @psalm-pure * @template T as string * @param T $string * @return (T is non-empty-string ? non-empty-string : string) */ function sodium_bin2hex(string $string): string {} /** * @param string $string * @param-out null $string */ function sodium_memzero(string &$string): void { } /** * @param mixed $value * @param bool $return * @return ($return is true ? string : void) * * @psalm-taint-specialize * @psalm-flow ($value) -> return * @psalm-taint-sink html $value */ function var_export($value, bool $return = false) {} /** * @param mixed $value * @param list $values * @return string * * @psalm-taint-specialize * @psalm-flow ($value, $values) -> return * @psalm-taint-sink html $value * @psalm-taint-sink html $values */ function var_dump($value, ...$values) {} /** * @param mixed $value * @param bool $return * @return ($return is true ? string : true) * * @psalm-taint-specialize * @psalm-flow ($value) -> return * @psalm-taint-sink html $value */ function print_r($value, bool $return = false) {} /** * @psalm-pure * * @psalm-taint-sink file $filename * @param mixed $filename * @return ($return is true ? string : bool) */ function highlight_file($filename, bool $return = false) {} /** * @psalm-pure * * @psalm-taint-sink file $filename * @param mixed $filename * @return ($return is true ? string : bool) */ function show_source($filename, bool $return = false) {} /** * @psalm-pure * * @psalm-taint-sink file $filename */ function php_strip_whitespace(string $filename) : string {} /** * @psalm-pure * * @param mixed $string * @return ($return is true ? string : bool) * * @psalm-flow ($string) -> return */ function highlight_string($string, bool $return = false) {} /** * @psalm-pure * * @return ($as_float is true ? float : string) */ function microtime(bool $as_float = false) {} /** * @psalm-pure * * @return ($as_float is true ? float : array) */ function gettimeofday(bool $as_float = false) {} /** * @psalm-pure * * @param numeric $num * @return ($num is int ? positive-int|0 : ($num is float ? float : positive-int|0|float)) */ function abs($num) {} /** * @psalm-pure * * @template T as string|int|float * @template TStep as int|float * @param T $start * @param T $end * @param TStep $step * @return ( * T is int * ? (TStep is int ? non-empty-list : non-empty-list) * : ( * T is float * ? non-empty-list * : ( * T is string * ? non-empty-list * : ( * T is int|float * ? non-empty-list * : non-empty-list * ) * ) * ) * ) */ function range($start, $end, $step = 1) {} /** * @psalm-pure * * @return ( * $format is 'd'|'j'|'N'|'w'|'z'|'W'|'m'|'n'|'t'|'L'|'o'|'Y'|'y'|'B'|'g'|'G'|'h'|'H'|'i'|'s'|'u'|'v'|'Z'|'U'|'I' * ? numeric-string * : ($timestamp is numeric ? string : string|false) * ) */ function date(string $format, int $timestamp = 0) {} /** * @psalm-pure * * @param mixed $vars * @param-out string|int|float|null $vars * @psalm-flow ($string, $format) -> return * @return (func_num_args() is 2 ? (null|list) : int) */ function sscanf(string $string, string $format, &...$vars) {} /** * @psalm-pure * * @return ( * func_num_args() is 1 * ? array{dirname: string, basename: string, extension?: string, filename: string} * : string * ) */ function pathinfo(string $path, int $flags = \PATHINFO_DIRNAME) {} /** * @psalm-pure * * @return (func_num_args() is 0 ? array : string|false) */ function getenv(string $varname = '', bool $local_only = false) {} /** * @psalm-pure * * @return ( * $string is non-empty-string ? non-empty-lowercase-string : lowercase-string * ) * * @psalm-flow ($string) -> return */ function strtolower(string $string) : string {} /** * @psalm-pure * * @return ( * $string is non-falsy-string * ? non-falsy-string * : ($string is non-empty-string ? non-empty-string : string) * ) * * @psalm-flow ($string) -> return */ function strtoupper(string $string) : string {} /** * @psalm-pure * * @param string|array $string * @param string|array $replace * @param int|array $offset * @param null|int|array $length * * @return ($string is array ? array : string) * * @psalm-flow ($string, $replace) -> return */ function substr_replace($string, $replace, $offset, $length = null) {} /** * @psalm-pure * * @param string $haystack * * @psalm-return positive-int|0|false */ function strpos($haystack, $needle, int $offset = 0) : int|false {} /** * @psalm-pure * * @return ( * $string is class-string * ? ($characters is '\\' ? class-string : string) * : ($string is lowercase-string ? lowercase-string : string) * ) * * @psalm-flow ($string) -> return */ function trim(string $string, string $characters = " \t\n\r\0\x0B") : string {} /** * @psalm-pure * * @return ( * $string is class-string * ? ($characters is '\\' ? class-string : string) * : ($string is lowercase-string ? lowercase-string : string) * ) * * @psalm-flow ($string) -> return */ function ltrim(string $string, string $characters = " \t\n\r\0\x0B") : string {} /** * @psalm-pure * * @return ($string is lowercase-string ? lowercase-string : string) * * @psalm-flow ($string) -> return */ function rtrim(string $string, string $characters = " \t\n\r\0\x0B") : string {} /** * @psalm-pure * * @param string|array $separator * @param array $array * * @return ( * $separator is non-empty-string * ? ($array is non-empty-array * ? ($array is array * ? ($separator is literal-string ? non-empty-literal-string : non-empty-string) * : non-empty-string * ) * : string) * : ($array is non-empty-array * ? ($array is array * ? ($array is array ? non-empty-literal-string : non-empty-string) * : string * ) * : string) * ) * * @psalm-flow ($separator) -> return * @psalm-flow ($array) -(array-fetch)-> return */ function implode($separator, array $array = []) : string {} /** * @psalm-pure * * @param string|array $separator * @param array $array * * @return ( * $separator is non-empty-string * ? ($array is non-empty-array * ? ($array is array * ? ($separator is literal-string ? non-empty-literal-string : non-empty-string) * : non-empty-string * ) * : string) * : ($array is non-empty-array * ? ($array is array * ? ($array is array ? non-empty-literal-string : non-empty-string) * : string * ) * : string) * ) * * @psalm-flow ($separator) -> return * @psalm-flow ($array) -(array-fetch)-> return */ function join($separator, array $array = []): string { } /** * @psalm-pure * * @param non-empty-string $separator * * @return ( * $string is lowercase-string * ? ( * $limit is int * ? list * : ( * $limit is int<0, 1> * ? list{lowercase-string} * : ( * $limit is 2 * ? list{0: lowercase-string, 1?: lowercase-string} * : ( * $limit is 3 * ? list{0: lowercase-string, 1?: lowercase-string, 2?: lowercase-string} * : non-empty-list * ) * ) * ) * ) * : ( * $limit is int * ? list * : ( * $limit is int<0, 1> * ? list{string} * : ( * $limit is 2 * ? list{0: string, 1?: string} * : ( * $limit is 3 * ? list{0: string, 1?: string, 2?: string} * : non-empty-list * ) * ) * ) * ) * ) * * @psalm-flow ($string) -(array-assignment)-> return */ function explode(string $separator, string $string, int $limit = -1) : array {} /** * @psalm-pure * * @psalm-flow ($subject) -(array-assignment)-> return * * @template TFlags as int-mask<0, 1, 2, 4> * * @param TFlags $flags * * @return (TFlags is 0|2 ? non-empty-list|false : (TFlags is 1|3 ? list|false : list|false)) * * @psalm-ignore-falsable-return */ function preg_split(string $pattern, string $subject, int $limit = -1, int $flags = 0) {} /** * @param array $array * * @return ( * $array is array * ? int * : ($array is array * ? float * : float|int * ) * ) */ function array_sum(array $array) {} /** * @param array $array * * @return ( * $array is array * ? int * : ($array is array * ? float * : float|int * ) * ) */ function array_product(array $array) {} /** * @psalm-pure * * 257 is FILTER_VALIDATE_INT * @psalm-taint-escape ($filter is 257 ? 'callable' : null) * @psalm-taint-escape ($filter is 257 ? 'unserialize' : null) * @psalm-taint-escape ($filter is 257 ? 'include' : null) * @psalm-taint-escape ($filter is 257 ? 'eval' : null) * @psalm-taint-escape ($filter is 257 ? 'ldap' : null) * @psalm-taint-escape ($filter is 257 ? 'sql' : null) * @psalm-taint-escape ($filter is 257 ? 'html' : null) * @psalm-taint-escape ($filter is 257 ? 'has_quotes' : null) * @psalm-taint-escape ($filter is 257 ? 'shell' : null) * @psalm-taint-escape ($filter is 257 ? 'ssrf' : null) * @psalm-taint-escape ($filter is 257 ? 'file' : null) * @psalm-taint-escape ($filter is 257 ? 'cookie' : null) * @psalm-taint-escape ($filter is 257 ? 'header' : null) * * 258 is FILTER_VALIDATE_BOOLEAN * @psalm-taint-escape ($filter is 258 ? 'callable' : null) * @psalm-taint-escape ($filter is 258 ? 'unserialize' : null) * @psalm-taint-escape ($filter is 258 ? 'include' : null) * @psalm-taint-escape ($filter is 258 ? 'eval' : null) * @psalm-taint-escape ($filter is 258 ? 'ldap' : null) * @psalm-taint-escape ($filter is 258 ? 'sql' : null) * @psalm-taint-escape ($filter is 258 ? 'html' : null) * @psalm-taint-escape ($filter is 258 ? 'has_quotes' : null) * @psalm-taint-escape ($filter is 258 ? 'shell' : null) * @psalm-taint-escape ($filter is 258 ? 'ssrf' : null) * @psalm-taint-escape ($filter is 258 ? 'file' : null) * @psalm-taint-escape ($filter is 258 ? 'cookie' : null) * @psalm-taint-escape ($filter is 258 ? 'header' : null) * * 259 is FILTER_VALIDATE_FLOAT * @psalm-taint-escape ($filter is 259 ? 'callable' : null) * @psalm-taint-escape ($filter is 259 ? 'unserialize' : null) * @psalm-taint-escape ($filter is 259 ? 'include' : null) * @psalm-taint-escape ($filter is 259 ? 'eval' : null) * @psalm-taint-escape ($filter is 259 ? 'ldap' : null) * @psalm-taint-escape ($filter is 259 ? 'sql' : null) * @psalm-taint-escape ($filter is 259 ? 'html' : null) * @psalm-taint-escape ($filter is 259 ? 'has_quotes' : null) * @psalm-taint-escape ($filter is 259 ? 'shell' : null) * @psalm-taint-escape ($filter is 259 ? 'ssrf' : null) * @psalm-taint-escape ($filter is 259 ? 'file' : null) * @psalm-taint-escape ($filter is 259 ? 'cookie' : null) * @psalm-taint-escape ($filter is 259 ? 'header' : null) * * 519 is FILTER_SANITIZE_NUMBER_INT * @psalm-taint-escape ($filter is 519 ? 'callable' : null) * @psalm-taint-escape ($filter is 519 ? 'unserialize' : null) * @psalm-taint-escape ($filter is 519 ? 'include' : null) * @psalm-taint-escape ($filter is 519 ? 'eval' : null) * @psalm-taint-escape ($filter is 519 ? 'ldap' : null) * @psalm-taint-escape ($filter is 519 ? 'sql' : null) * @psalm-taint-escape ($filter is 519 ? 'html' : null) * @psalm-taint-escape ($filter is 519 ? 'has_quotes' : null) * @psalm-taint-escape ($filter is 519 ? 'shell' : null) * @psalm-taint-escape ($filter is 519 ? 'ssrf' : null) * @psalm-taint-escape ($filter is 519 ? 'file' : null) * @psalm-taint-escape ($filter is 519 ? 'cookie' : null) * @psalm-taint-escape ($filter is 519 ? 'header' : null) * * 520 is FILTER_SANITIZE_NUMBER_FLOAT * @psalm-taint-escape ($filter is 520 ? 'callable' : null) * @psalm-taint-escape ($filter is 520 ? 'unserialize' : null) * @psalm-taint-escape ($filter is 520 ? 'include' : null) * @psalm-taint-escape ($filter is 520 ? 'eval' : null) * @psalm-taint-escape ($filter is 520 ? 'ldap' : null) * @psalm-taint-escape ($filter is 520 ? 'sql' : null) * @psalm-taint-escape ($filter is 520 ? 'html' : null) * @psalm-taint-escape ($filter is 520 ? 'has_quotes' : null) * @psalm-taint-escape ($filter is 520 ? 'shell' : null) * @psalm-taint-escape ($filter is 520 ? 'ssrf' : null) * @psalm-taint-escape ($filter is 520 ? 'file' : null) * @psalm-taint-escape ($filter is 520 ? 'cookie' : null) * @psalm-taint-escape ($filter is 520 ? 'header' : null) * * @psalm-flow ($value, $filter, $options) -> return */ function filter_var(mixed $value, int $filter = FILTER_DEFAULT, array|int $options = 0): mixed {} /** * @psalm-pure * * @psalm-taint-escape html * @psalm-flow ($string) -> return */ function strip_tags(string $string, ?string $allowed_tags = null) : string {} /** * @psalm-pure * * @psalm-flow ($string) -> return */ function stripcslashes(string $string) : string {} /** * @psalm-pure * * @psalm-flow ($string) -> return */ function stripslashes(string $string) : string {} /** * @psalm-pure * * Tainting is handled in a plugin * * @psalm-flow ($string) -> return */ function htmlentities(string $string, ?int $flags = null, ?string $encoding = null, bool $double_encode = true) : string {} /** * @psalm-pure * * Tainting is handled in a plugin * * @psalm-flow ($string) -> return */ function html_entity_decode(string $string, ?int $flags = null, ?string $encoding = null) : string {} /** * @psalm-pure * * Tainting is handled in a plugin * * @psalm-flow ($string) -> return * @psalm-return ( * $string is non-empty-string * ? non-empty-string * : string * ) */ function htmlspecialchars(string $string, int $flags = ENT_COMPAT | ENT_HTML401, ?string $encoding = 'UTF-8', bool $double_encode = true) : string {} /** * @psalm-pure * * Tainting is handled in a plugin * * @psalm-flow ($string) -> return */ function htmlspecialchars_decode(string $string, ?int $flags = null) : string {} /** * @psalm-pure * * @psalm-taint-escape html * @psalm-taint-escape has_quotes * @psalm-flow ($string) -> return */ function urlencode(string $string) : string {} /** * @psalm-pure * * @psalm-return ( * $string is '' * ? 0 * : ( * $string is non-empty-string * ? positive-int * : (0|positive-int) * ) * ) */ function strlen(string $string) : int {} /** * @psalm-pure * * @param string|array $search * @param string|array $replace * @param string|array $subject * @param int $count * @return ($subject is array ? array : string) * * @psalm-flow ($replace, $subject) -> return */ function str_replace($search, $replace, $subject, &$count = null) {} /** * @psalm-pure * * @param string|array $search * @param string|array $replace * @param string|array $subject * @param int $count * @return ($subject is array ? array : string) * * @psalm-flow ($replace, $subject) -> return */ function str_ireplace($search, $replace, $subject, &$count = null) {} /** * @psalm-pure * * @return ($string is non-empty-string ? non-empty-string : ($length is positive-int ? non-empty-string: string)) * * @psalm-flow ($string, $pad_string) -> return */ function str_pad(string $string, int $length, $pad_string = '', int $pad_type = STR_PAD_RIGHT): string {} /** * @psalm-pure * * @todo update $times to be `0|positive-int` * @return ( * $string is non-empty-string * ? ( * $times is positive-int * ? non-empty-string * : ($times is 0 ? '' : string) * ) * : ($times is 0 ? '' : string) * ) * * @psalm-flow ($string) -> return */ function str_repeat(string $string, int $times): string {} /** * @psalm-pure * * @psalm-flow ($string) -> return */ function str_rot13(string $string): string {} /** * @psalm-pure * * @psalm-flow ($string) -> return */ function str_shuffle(string $string): string {} /** * @psalm-pure * @param positive-int $length * @return non-empty-list * * @psalm-flow ($string) -> return */ function str_split(string $string, int $length = 1) {} /** * @psalm-pure * @template T as string * @param T $needle * @psalm-assert-if-true =(T is '' ? string : non-empty-string) $haystack * @return ($needle is '' ? true : ($haystack is '' ? false : bool)) */ function str_starts_with(string $haystack, string $needle): bool {} /** * @psalm-pure * @template T as string * @param T $needle * @psalm-assert-if-true =(T is '' ? string : non-empty-string) $haystack * @return ($needle is '' ? true : ($haystack is '' ? false : bool)) */ function str_ends_with(string $haystack, string $needle): bool {} /** * @psalm-pure * @template T as string * @param T $needle * @psalm-assert-if-true =(T is '' ? string : non-empty-string) $haystack * @return ($needle is '' ? true : ($haystack is '' ? false : bool)) */ function str_contains(string $haystack, string $needle): bool {} /** * @psalm-pure * @return string|false * @psalm-ignore-falsable-return * * @psalm-flow ($haystack) -> return */ function strstr(string $haystack, string $needle, bool $before_needle = false) {} /** * @psalm-pure * @return string|false * @psalm-ignore-falsable-return * * @psalm-flow ($haystack) -> return */ function stristr(string $haystack, string $needle, bool $before_needle = false) {} /** * @psalm-pure * @return string|false * @psalm-ignore-falsable-return * * @psalm-flow ($haystack) -> return */ function strchr(string $haystack, string $needle, bool $before_needle = false) {} /** * @psalm-pure * @return string|false * @psalm-ignore-falsable-return * * @psalm-flow ($string) -> return */ function strpbrk(string $string, string $characters) {} /** * @psalm-pure * @return string|false * @psalm-ignore-falsable-return * * @psalm-flow ($haystack) -> return */ function strrchr(string $haystack, string $needle) {} /** * @psalm-pure * * @psalm-flow ($string) -> return */ function strrev(string $string): string {} /** * @psalm-pure * * @param 0|1|2 $format * @return ( * $format is 0 ? * int : * ( * $format is 1 ? * list : * array * ) * ) */ function str_word_count(string $string, int $format = 0, string|null $characters = null) {} /** * @psalm-pure * * @param string|string[] $pattern * @param string|array $replacement * @param string|array $subject * @param int $count * @return ($subject is array ? array : string|null) * * @psalm-flow ($replacement, $subject) -> return */ function preg_filter($pattern, $replacement, $subject, int $limit = -1, &$count = null) {} /** * @psalm-pure * * @param string|string[] $pattern * @param string|array $replacement * @param string|array $subject * @param int $count * @return ($subject is array ? array|null : string|null) * * @psalm-flow ($replacement, $subject) -> return */ function preg_replace($pattern, $replacement, $subject, int $limit = -1, &$count = null) {} /** * @param string|string[] $pattern * @param callable(string[]):string $callback * @param string|array $subject * @param int $count * @return ($subject is array ? array|null : string|null) * * @psalm-taint-specialize * @psalm-flow ($subject) -> return */ function preg_replace_callback($pattern, $callback, $subject, int $limit = -1, &$count = null, int $flags = 0) {} /** * @psalm-pure * @template TFlags as int * * @param string $pattern * @param string $subject * @param mixed $matches * @param TFlags $flags * @param-out ( * TFlags is 1 * ? array> * : (TFlags is 2 * ? list> * : (TFlags is 256|257 * ? array> * : (TFlags is 258 * ? list> * : (TFlags is 512|513 * ? array> * : (TFlags is 514 * ? list> * : (TFlags is 770 * ? list> * : array * ) * ) * ) * ) * ) * ) * ) $matches * @return int|false * @psalm-ignore-falsable-return */ function preg_match_all($pattern, $subject, &$matches = [], int $flags = 1, int $offset = 0) {} /** * @psalm-pure * @template TFlags as int-mask<0, 256, 512> * * @param string $pattern * @param string $subject * @param mixed $matches * @param TFlags $flags * @param-out (TFlags is 256 ? array : * TFlags is 512 ? array : * TFlags is 768 ? array : * array * ) $matches * @return 1|0|false * @psalm-ignore-falsable-return */ function preg_match($pattern, $subject, &$matches = [], int $flags = 0, int $offset = 0) {} /** * @psalm-pure * * @return (PHP_MAJOR_VERSION is 5|7 ? string|false : string) * @psalm-ignore-falsable-return * * @psalm-flow ($string) -> return */ function substr(string $string, int $offset, ?int $length = null) {} /** * @psalm-pure * * @psalm-flow ($str) -> return */ function preg_quote(string $str, ?string $delimiter = null) : string {} /** * @psalm-pure * * @param string|int|float $values * @return ($format is non-empty-string * ? ($values is non-empty-string|int|float ? non-empty-string : string) * : string) * * @psalm-flow ($format, $values) -> return */ function sprintf(string $format, ...$values) : string {} /** * @psalm-pure * @return string|false * @psalm-ignore-falsable-return * * @psalm-flow ($format, $values) -> return */ function vsprintf(string $format, array $values) {} /** * @psalm-pure * @return string * * @psalm-flow ($string) -> return */ function wordwrap(string $string, int $width = 75, string $break = "\n", bool $cut_long_words = false) : string {} /** * @psalm-pure * * @param string|int|float $values * * @psalm-taint-specialize * @psalm-flow ($format, $values) -> return * @psalm-taint-sink html $format * @psalm-taint-sink html $values */ function printf(string $format, ...$values) : string {} /** * @psalm-taint-specialize * @psalm-taint-sink html $format * @psalm-taint-sink html $values */ function vprintf(string $format, array $values) : int {} /** * @psalm-pure * * @return string|false * @psalm-ignore-falsable-return * * @psalm-flow ($path) -> return */ function realpath(string $path) {} /** * @psalm-pure * * @param numeric-string $num1 * @param numeric-string $num2 * @return (PHP_MAJOR_VERSION is 8 ? numeric-string : ($num2 is "0" ? null : numeric-string)) */ function bcdiv(string $num1, string $num2, int $scale = 0): ?string {} /** * @psalm-pure * * @param scalar|null|object $value * @return string The string value of var. * * @psalm-flow ($value) -> return */ function strval ($value): string {} /** * @return ($string is non-empty-string ? non-empty-list : non-empty-list|array{null}) * @psalm-pure * * @psalm-flow ($string) -> return */ function str_getcsv(string $string, string $separator = ',', string $enclosure = '"', string $escape = '\\\\') { } /** * @template TKey as array-key * @template TArray as array * * @param TArray $array * * @return (TArray is non-empty-array ? non-empty-array : array) * * @psalm-pure */ function array_count_values(array $array): array {} /** * @psalm-pure * * @psalm-flow ($string) -> return */ function addcslashes(string $string, string $characters) : string { } /** * @psalm-pure * * @psalm-flow ($string) -> return */ function addslashes(string $string): string { } /** * @psalm-pure * * @psalm-flow ($string) -> return */ function ucfirst(string $string): string { } /** * @psalm-pure * * @psalm-flow ($string, $separators) -> return */ function ucwords (string $string, string $separators = " \t\r\n\f\v"): string { } /** * @psalm-pure * * @psalm-flow ($string) -> return */ function lcfirst(string $string): string { } /** * @psalm-pure * * @psalm-flow ($string) -> return */ function nl2br(string $string, bool $use_xhtml = false): string { } /** * @psalm-pure * * @psalm-flow ($string) -> return */ function quoted_printable_decode(string $string): string { } /** * @psalm-pure * * @psalm-flow ($string) -> return */ function quoted_printable_encode(string $string): string { } /** * @psalm-pure * * @psalm-flow ($string) -> return */ function quotemeta(string $string): string { } /** * @psalm-pure * * @psalm-flow ($string) -> return */ function chop(string $string, string $characters = " \t\n\r\0\x0B"): string { } /** * @psalm-pure * @psalm-flow ($string, $separator) -> return */ function chunk_split(string $string, int $length = 76, string $separator= ''): string { } /** * @psalm-pure * * @psalm-flow ($string) -> return */ function convert_uudecode(string $string): string { } /** * @psalm-pure * * @psalm-flow ($string) -> return */ function convert_uuencode(string $string) : string { } /** * @psalm-pure * * @psalm-taint-escape ldap * @psalm-flow ($value) -> return */ function ldap_escape(string $value, string $ignore = "", int $flags = 0) : string {} /** * @psalm-pure * * @param int<1, 2147483647> $depth * @return mixed * @psalm-flow ($json) -> return */ function json_decode(string $json, ?bool $associative = null, int $depth = 512, int $flags = 0) {} /** * The conditional return type below relies on the fact that JSON_THROW_ON_ERROR is * the highest-valued of JSON constants * @psalm-pure * * @param int<1, 2147483647> $depth * @return ($flags is int<4194304, 8388607> ? non-empty-string : non-empty-string|false) * * @psalm-flow ($value) -> return * @psalm-ignore-falsable-return */ function json_encode(mixed $value, int $flags = 0, int $depth = 512) {} /** * @psalm-pure * * @return string|false * * @psalm-flow ($values) -> return * @psalm-ignore-falsable-return */ function pack(string $format, mixed ...$values) {} /** * @psalm-pure * * @param string|int $in_codepage * @param string|int $out_codepage * @psalm-flow ($subject) -> return */ function sapi_windows_cp_conv($in_codepage, $out_codepage, string $subject) : ?string {} /** * @psalm-pure * * @psalm-flow ($prefix) -> return */ function uniqid(string $prefix = "", bool $more_entropy = false) : string {} /** * @psalm-pure * * @return array|false * @psalm-ignore-falsable-return * * @psalm-flow ($string) -> return */ function unpack(string $format, string $string, int $offset = 0) {} /** * @psalm-pure * * @return string|false * * @psalm-flow ($string) -> return * @psalm-ignore-falsable-return */ function base64_decode(string $string, bool $strict = false) {} /** * @psalm-pure * * @psalm-flow ($string) -> return * @template T as string * @param T $string * @return (T is non-empty-string ? non-empty-string : string) */ function base64_encode(string $string) : string {} /** * @psalm-pure * * @template T as string * @param T $string * @return (T is non-empty-string ? non-empty-string : string) */ function bin2hex(string $string): string {} /** * @psalm-pure * * @param resource|null $context * * @return ($associative is false|0 ? list : array>)|false * * @psalm-taint-sink ssrf $url */ function get_headers(string $url, int $associative = 0, $context = null) : array|false {} /** * @psalm-pure * * @return array|false * * @psalm-taint-sink ssrf $filename */ function get_meta_tags(string $filename, bool $use_include_path = false) : array|false {} /** * @return ($categorize is false ? array : array>) */ function get_defined_constants(bool $categorize = false): array {} /** * @param mixed $object_or_class * @param class-string $class * @param bool $allow_string * @return ($allow_string is false ? ($object_or_class is object ? bool : false) : bool) */ function is_a($object_or_class, string $class, $allow_string = false): bool{} /** * @template T of array|string * @param T $string * @return (T is array ? array : T is array ? array : string|false) * @psalm-ignore-falsable-return */ function mb_convert_encoding(array|string $string, string $to_encoding, array|string|null $from_encoding = null): array|string|false{} /** * @template TRead of null|array * @template TWrite of null|array * @template TExcept of null|array * @param TRead $read * @param TWrite $write * @param TExcept $except * @return false|int<0, max> * @param-out (TRead is null ? null : array) $read * @param-out (TWrite is null ? null : array) $write * @param-out (TExcept is null ? null : array) $except * @psalm-suppress ReferenceConstraintViolation */ function stream_select(null|array &$read, null|array &$write, null|array &$except, null|int $seconds, null|int $microseconds = null) : bool|int {} /** * @psalm-pure * * @psalm-taint-escape sql * @psalm-flow ($string) -> return */ function mysqli_escape_string($string) {} /** * @psalm-pure * * @psalm-taint-escape sql * @psalm-flow ($string) -> return */ function mysqli_real_escape_string($string) {} /** * @psalm-pure * * @psalm-taint-escape sql * @psalm-flow ($string) -> return */ function db2_escape_string($string) {} /** * @psalm-pure * * @psalm-taint-escape sql * @psalm-flow ($string) -> return */ function cubrid_real_escape_string($string) {} /** * @psalm-pure * * @psalm-taint-escape sql * @psalm-flow ($string1, $string2) -> return */ function pg_escape_bytea($string1, $string2 = null) {} /** * @psalm-pure * * @psalm-taint-escape sql * @psalm-flow ($string1, $string2) -> return */ function pg_escape_identifier($string1, $string2 = null) {} /** * @psalm-pure * * @psalm-taint-escape sql * @psalm-flow ($string1, $string2) -> return */ function pg_escape_literal($string1, $string2 = null) {} /** * @psalm-pure * * @psalm-taint-escape sql * @psalm-flow ($string1, $string2) -> return */ function pg_escape_string($string1, $string2 = null) {} start = $start; $this->end = $end; $this->insertion_text = $insertion_text; $this->preserve_indentation = $preserve_indentation; $this->remove_trailing_newline = $remove_trailing_newline; } public function getKey() : string { return $this->start === $this->end ? $this->start . ':' . sha1($this->insertion_text) : $this->start . ':' . $this->end; } public function transform(string $existing_contents) : string { if ($this->preserve_indentation) { $newline_pos = strrpos($existing_contents, "\n", $this->start - strlen($existing_contents)); $newline_pos = $newline_pos !== \false ? $newline_pos + 1 : 0; $indentation = substr($existing_contents, $newline_pos, $this->start - $newline_pos); if (trim($indentation) === '') { $this->insertion_text .= $indentation; } } if ($this->remove_trailing_newline && strlen($existing_contents) > $this->end && $existing_contents[$this->end] === "\n") { $newline_pos = strrpos($existing_contents, "\n", $this->start - strlen($existing_contents)); $newline_pos = $newline_pos !== \false ? $newline_pos + 1 : 0; $indentation = substr($existing_contents, $newline_pos, $this->start - $newline_pos); if (trim($indentation) === '') { $this->start -= strlen($indentation); $this->end++; } } return substr($existing_contents, 0, $this->start) . $this->insertion_text . substr($existing_contents, $this->end); } } file_start = (int) $stmt->getAttribute('startFilePos'); /** @psalm-suppress ImpureMethodCall Actually mutation-free just not marked */ $this->file_end = (int) $stmt->getAttribute('endFilePos'); $this->raw_file_start = $this->file_start; $this->raw_file_end = $this->file_end; $this->file_path = $file_source->getFilePath(); $this->file_name = $file_source->getFileName(); $this->single_line = $single_line; $this->regex_type = $regex_type; $this->previous_location = $previous_location; $this->text = $selected_text; /** @psalm-suppress ImpureMethodCall Actually mutation-free just not marked */ $doc_comment = $stmt->getDocComment(); $this->docblock_start = $doc_comment ? $doc_comment->getStartFilePos() : null; $this->docblock_start_line_number = $doc_comment ? $doc_comment->getStartLine() : null; $this->preview_start = $this->docblock_start ?: $this->file_start; /** @psalm-suppress ImpureMethodCall Actually mutation-free just not marked */ $this->raw_line_number = $stmt->getLine(); $this->docblock_line_number = $comment_line; } /** * @psalm-suppress PossiblyUnusedMethod Part of public API * @return static */ public function setCommentLine(?int $line) : self { if ($line === $this->docblock_line_number) { return $this; } $cloned = clone $this; $cloned->docblock_line_number = $line; return $cloned; } /** * @psalm-external-mutation-free * @psalm-suppress InaccessibleProperty Mainly used for caching */ private function calculateRealLocation() : void { if ($this->have_recalculated) { return; } $this->have_recalculated = \true; $this->selection_start = $this->file_start; $this->selection_end = $this->file_end + 1; $project_analyzer = ProjectAnalyzer::getInstance(); $codebase = $project_analyzer->getCodebase(); /** @psalm-suppress ImpureMethodCall */ $file_contents = $codebase->getFileContents($this->file_path); $file_length = strlen($file_contents); $search_limit = $this->single_line ? $this->selection_start : $this->selection_end; if ($search_limit <= $file_length) { $preview_end = strpos($file_contents, "\n", $search_limit); } else { $preview_end = \false; } // if the string didn't contain a newline if ($preview_end === \false) { $preview_end = $this->selection_end; } $this->preview_end = $preview_end; if ($this->docblock_line_number && $this->docblock_start_line_number && $this->preview_start < $this->selection_start) { $preview_lines = explode("\n", mb_strcut($file_contents, $this->preview_start, $this->selection_start - $this->preview_start - 1)); $preview_offset = 0; $comment_line_offset = $this->docblock_line_number - $this->docblock_start_line_number; for ($i = 0; $i < $comment_line_offset; ++$i) { $preview_offset += strlen($preview_lines[$i]) + 1; } if (!isset($preview_lines[$i])) { throw new Exception('Should have offset'); } $key_line = $preview_lines[$i]; $indentation = (int) strpos($key_line, '@'); $key_line = trim(preg_replace('@\\**/\\s*@', '', mb_strcut($key_line, $indentation))); $this->selection_start = $preview_offset + $indentation + $this->preview_start; $this->selection_end = $this->selection_start + strlen($key_line); } if ($this->regex_type !== null) { switch ($this->regex_type) { case self::VAR_TYPE: $regex = '/@(?:psalm-)?var[ \\t]+' . CommentAnalyzer::TYPE_REGEX . '/'; break; case self::FUNCTION_RETURN_TYPE: $regex = '/\\:\\s+(\\??\\s*[A-Za-z0-9_\\\\\\[\\]]+)/'; break; case self::FUNCTION_PARAM_TYPE: $regex = '/^(\\??\\s*[A-Za-z0-9_\\\\\\[\\]]+)\\s/'; break; case self::FUNCTION_PHPDOC_RETURN_TYPE: $regex = '/@(?:psalm-)?return[ \\t]+' . CommentAnalyzer::TYPE_REGEX . '/'; break; case self::FUNCTION_PHPDOC_METHOD: $regex = '/@(?:psalm-)?method[ \\t]+(.*)/'; break; case self::FUNCTION_PHPDOC_PARAM_TYPE: $regex = '/@(?:psalm-)?param[ \\t]+' . CommentAnalyzer::TYPE_REGEX . '/'; break; case self::FUNCTION_PARAM_VAR: $regex = '/(\\$[^ ]*)/'; break; case self::CATCH_VAR: $regex = '/(\\$[^ ^\\)]*)/'; break; default: throw new UnexpectedValueException('Unrecognised regex type ' . $this->regex_type); } $preview_snippet = mb_strcut($file_contents, $this->selection_start, $this->selection_end - $this->selection_start); if ($this->text) { $regex = '/(' . str_replace(',', ',[ ]*', preg_quote($this->text, '/')) . ')/'; } if (preg_match($regex, $preview_snippet, $matches, PREG_OFFSET_CAPTURE)) { if (!isset($matches[1]) || $matches[1][1] === -1) { throw new LogicException("Failed to match anything to 1st capturing group, " . "or regex doesn't contain 1st capturing group, regex type " . $this->regex_type); } $this->selection_start = $this->selection_start + $matches[1][1]; $this->selection_end = $this->selection_start + strlen($matches[1][0]); } } // reset preview start to beginning of line $this->preview_start = (int) strrpos($file_contents, "\n", min($this->preview_start, $this->selection_start) - strlen($file_contents)) + 1; $this->selection_start = max($this->preview_start, $this->selection_start); $this->selection_end = min($this->preview_end, $this->selection_end); if ($this->preview_end - $this->selection_end > 200) { $this->preview_end = (int) strrpos($file_contents, "\n", $this->selection_end + 200 - strlen($file_contents)); // if the line is over 200 characters long if ($this->preview_end < $this->selection_end) { $this->preview_end = $this->selection_end + 50; } } $this->snippet = mb_strcut($file_contents, $this->preview_start, $this->preview_end - $this->preview_start); // text is within snippet. It's 50% faster to cut it from the snippet than from the full text $selection_length = $this->selection_end - $this->selection_start; $this->text = mb_strcut($this->snippet, $this->selection_start - $this->preview_start, $selection_length); // reset preview start to beginning of line if ($file_contents !== '') { $this->column_from = $this->selection_start - (int) strrpos($file_contents, "\n", $this->selection_start - strlen($file_contents)); } else { $this->column_from = $this->selection_start; } $newlines = substr_count($this->text, "\n"); if ($newlines) { $last_newline_pos = strrpos($file_contents, "\n", $this->selection_end - strlen($file_contents) - 1); $this->column_to = $this->selection_end - (int) $last_newline_pos; } else { $this->column_to = $this->column_from + strlen($this->text); } $this->end_line_number = $this->getLineNumber() + $newlines; } public function getLineNumber() : int { return $this->docblock_line_number ?: $this->raw_line_number; } public function getEndLineNumber() : int { $this->calculateRealLocation(); return $this->end_line_number; } public function getSnippet() : string { $this->calculateRealLocation(); return $this->snippet; } public function getSelectedText() : string { $this->calculateRealLocation(); return (string) $this->text; } public function getColumn() : int { $this->calculateRealLocation(); return $this->column_from; } public function getEndColumn() : int { $this->calculateRealLocation(); return $this->column_to; } /** * @return array{0: int, 1: int} */ public function getSelectionBounds() : array { $this->calculateRealLocation(); return [$this->selection_start, $this->selection_end]; } /** * @return array{0: int, 1: int} */ public function getSnippetBounds() : array { $this->calculateRealLocation(); return [$this->preview_start, $this->preview_end]; } public function getHash() : string { return $this->file_name . ' ' . $this->raw_file_start . $this->raw_file_end; } public function getShortSummary() : string { return $this->file_name . ':' . $this->getLineNumber() . ':' . $this->getColumn(); } } */ public $uses; /** * @var array */ public $uses_flipped; /** * @var array */ public $functions; /** * @var array */ public $functions_flipped; /** * @var array */ public $constants; /** * @var array */ public $constants_flipped; /** @var string|null */ public $namespace; /** @var ?int */ public $namespace_first_stmt_start; /** @var ?int */ public $uses_start; /** @var ?int */ public $uses_end; /** * @param array $uses * @param array $functions * @param array $constants * @param array $uses_flipped * @param array $functions_flipped * @param array $constants_flipped * @internal * @psalm-mutation-free */ public function __construct(?string $namespace = null, array $uses = [], array $functions = [], array $constants = [], array $uses_flipped = [], array $functions_flipped = [], array $constants_flipped = []) { $this->namespace = $namespace; $this->uses = $uses; $this->functions = $functions; $this->constants = $constants; $this->uses_flipped = $uses_flipped; $this->functions_flipped = $functions_flipped; $this->constants_flipped = $constants_flipped; } } > $template_type_map */ public static function parseString(string $type_string, ?int $analysis_php_version_id = null, array $template_type_map = []) : Union { return TypeParser::parseTokens(TypeTokenizer::tokenize($type_string), $analysis_php_version_id, $template_type_map); } public static function getFQCLNFromString(string $class, \Psalm\Aliases $aliases) : string { if ($class === '') { throw new InvalidArgumentException('$class cannot be empty'); } if ($class[0] === '\\') { return substr($class, 1); } $imported_namespaces = $aliases->uses; if (strpos($class, '\\') !== \false) { $class_parts = explode('\\', $class); $first_namespace = array_shift($class_parts); if (isset($imported_namespaces[strtolower($first_namespace)])) { return $imported_namespaces[strtolower($first_namespace)] . '\\' . implode('\\', $class_parts); } } elseif (isset($imported_namespaces[strtolower($class)])) { return $imported_namespaces[strtolower($class)]; } $namespace = $aliases->namespace; return ($namespace ? $namespace . '\\' : '') . $class; } /** * @param array $aliased_classes * @psalm-pure */ public static function getStringFromFQCLN(string $value, ?string $namespace, array $aliased_classes, ?string $this_class, bool $allow_self = \false, bool $is_static = \false) : string { if ($allow_self && $value === $this_class) { if ($is_static) { return 'static'; } return 'self'; } if (isset($aliased_classes[strtolower($value)])) { return $aliased_classes[strtolower($value)]; } if ($namespace && stripos($value, $namespace . '\\') === 0) { $candidate = preg_replace('/^' . preg_quote($namespace . '\\') . '/i', '', $value); $candidate_parts = explode('\\', $candidate); if (!isset($aliased_classes[strtolower($candidate_parts[0])])) { return $candidate; } } elseif (!$namespace && strpos($value, '\\') === \false) { return $value; } if (strpos($value, '\\')) { $parts = explode('\\', $value); $suffix = array_pop($parts); while ($parts) { $left = implode('\\', $parts); if (isset($aliased_classes[strtolower($left)])) { return $aliased_classes[strtolower($left)] . '\\' . $suffix; } $suffix = array_pop($parts) . '\\' . $suffix; } } return '\\' . $value; } /** * @psalm-pure */ public static function getInt(bool $from_calculation = \false, ?int $value = null) : Union { if ($value !== null) { return new Union([new TLiteralInt($value)], ['from_calculation' => $from_calculation]); } return new Union([new TInt()], ['from_calculation' => $from_calculation]); } /** * @psalm-pure */ public static function getLowercaseString() : Union { $type = new TLowercaseString(); return new Union([$type]); } /** * @psalm-pure */ public static function getNonEmptyLowercaseString() : Union { $type = new TNonEmptyLowercaseString(); return new Union([$type]); } /** * @psalm-pure */ public static function getNonEmptyString() : Union { $type = new TNonEmptyString(); return new Union([$type]); } /** * @psalm-pure */ public static function getNonFalsyString() : Union { $type = new TNonFalsyString(); return new Union([$type]); } /** * @psalm-pure */ public static function getNumeric() : Union { $type = new TNumeric(); return new Union([$type]); } /** * @psalm-pure */ public static function getNumericString() : Union { $type = new TNumericString(); return new Union([$type]); } public static function getString(?string $value = null) : Union { return new Union([$value === null ? new TString() : self::getAtomicStringFromLiteral($value)]); } /** @return TLiteralString|TNonEmptyString */ public static function getAtomicStringFromLiteral(string $value, bool $from_docblock = \false) : TString { $config = \Psalm\Config::getInstance(); $event = new StringInterpreterEvent($value, ProjectAnalyzer::getInstance()->getCodebase()); $type = $config->eventDispatcher->dispatchStringInterpreter($event); if (!$type) { if (strlen($value) < $config->max_string_length) { $type = new TLiteralString($value, $from_docblock); } else { $type = new TNonEmptyString($from_docblock); } } return $type; } /** * @psalm-pure */ public static function getSingleLetter() : Union { $type = new TSingleLetter(); return new Union([$type]); } /** * @psalm-pure */ public static function getClassString(string $extends = 'object') : Union { return new Union([new TClassString($extends, $extends === 'object' ? null : new TNamedObject($extends))]); } /** * @psalm-pure */ public static function getLiteralClassString(string $class_type, bool $definite_class = \false) : Union { $type = new TLiteralClassString($class_type, $definite_class); return new Union([$type]); } /** * @psalm-pure */ public static function getNull(bool $from_docblock = \false) : Union { $type = new TNull($from_docblock); return new Union([$type]); } /** * @psalm-pure */ public static function getMixed(bool $from_loop_isset = \false, bool $from_docblock = \false) : Union { $type = new TMixed($from_loop_isset, $from_docblock); return new Union([$type]); } /** * @psalm-pure */ public static function getScalar(bool $from_docblock = \false) : Union { $type = new TScalar($from_docblock); return new Union([$type]); } /** * @psalm-pure */ public static function getNever(bool $from_docblock = \false) : Union { $type = new TNever($from_docblock); return new Union([$type]); } /** * @psalm-pure */ public static function getBool(bool $from_docblock = \false) : Union { $type = new TBool($from_docblock); return new Union([$type]); } /** * @psalm-pure */ public static function getFloat(?float $value = null, bool $from_docblock = \false) : Union { if ($value !== null) { $type = new TLiteralFloat($value, $from_docblock); } else { $type = new TFloat($from_docblock); } return new Union([$type]); } /** * @psalm-pure */ public static function getObject() : Union { $type = new TObject(); return new Union([$type]); } /** * @psalm-pure */ public static function getClosure() : Union { $type = new TClosure('Closure'); return new Union([$type]); } /** * @psalm-pure */ public static function getArrayKey(bool $from_docblock = \false) : Union { $type = new TArrayKey($from_docblock); return new Union([$type]); } /** * @psalm-pure */ public static function getArray() : Union { $type = new TArray([new Union([new TArrayKey()]), new Union([new TMixed()])]); return new Union([$type]); } /** * @psalm-pure */ public static function getEmptyArray() : Union { return new Union([self::getEmptyArrayAtomic()]); } /** * @psalm-pure */ public static function getEmptyArrayAtomic() : TArray { return new TArray([new Union([new TNever()]), new Union([new TNever()])]); } /** * @psalm-pure */ public static function getList(?Union $of = null, bool $from_docblock = \false) : Union { return new Union([self::getListAtomic($of ?? self::getMixed($from_docblock), $from_docblock)]); } /** * @psalm-pure */ public static function getNonEmptyList(?Union $of = null, bool $from_docblock = \false) : Union { return new Union([self::getNonEmptyListAtomic($of ?? self::getMixed($from_docblock), $from_docblock)]); } /** * @psalm-pure */ public static function getListAtomic(Union $of, bool $from_docblock = \false) : TKeyedArray { return new TKeyedArray([$of->setPossiblyUndefined(\true)], null, [self::getListKey(), $of], \true, $from_docblock); } /** * @psalm-pure */ public static function getNonEmptyListAtomic(Union $of, bool $from_docblock = \false) : TKeyedArray { return new TKeyedArray([$of->setPossiblyUndefined(\false)], null, [self::getListKey(), $of], \true, $from_docblock); } private static ?Union $listKey = null; /** * @psalm-pure */ public static function getListKey() : Union { return self::$listKey ??= new Union([new TIntRange(0, null)]); } /** * @psalm-pure */ public static function getVoid(bool $from_docblock = \false) : Union { $type = new TVoid($from_docblock); return new Union([$type]); } /** * @psalm-pure */ public static function getFalse(bool $from_docblock = \false) : Union { $type = new TFalse($from_docblock); return new Union([$type]); } /** * @psalm-pure */ public static function getTrue(bool $from_docblock = \false) : Union { $type = new TTrue($from_docblock); return new Union([$type]); } /** * @psalm-pure */ public static function getResource(bool $from_docblock = \false) : Union { return new Union([new TResource($from_docblock)]); } /** * @psalm-external-mutation-free * @param non-empty-list $union_types */ public static function combineUnionTypeArray(array $union_types, ?\Psalm\Codebase $codebase) : Union { $first_type = array_pop($union_types); foreach ($union_types as $type) { $first_type = self::combineUnionTypes($first_type, $type, $codebase); } return $first_type; } /** * Combines two union types into one * * @param int $literal_limit any greater number of literal types than this * will be merged to a scalar * @psalm-external-mutation-free * @psalm-suppress ImpurePropertyAssignment We're not mutating external instances * @psalm-suppress InaccessibleProperty We're not mutating external instances */ public static function combineUnionTypes(?Union $type_1, ?Union $type_2, ?\Psalm\Codebase $codebase = null, bool $overwrite_empty_array = \false, bool $allow_mixed_union = \true, int $literal_limit = 500, ?bool $possibly_undefined = null) : Union { if ($type_2 === null && $type_1 === null) { throw new UnexpectedValueException('At least one type must be provided to combine'); } if ($type_1 === null) { if ($possibly_undefined !== null) { return $type_2->setPossiblyUndefined($possibly_undefined); } return $type_2; } if ($type_2 === null) { if ($possibly_undefined !== null) { return $type_1->setPossiblyUndefined($possibly_undefined); } return $type_1; } if ($type_1 === $type_2) { if ($possibly_undefined !== null) { return $type_1->setPossiblyUndefined($possibly_undefined); } return $type_1; } if ($type_1->isVanillaMixed() && $type_2->isVanillaMixed()) { $combined_type = self::getMixed(); } else { $both_failed_reconciliation = \false; if ($type_1->failed_reconciliation) { if ($type_2->failed_reconciliation) { $both_failed_reconciliation = \true; } else { return $type_2->setProperties(['parent_nodes' => array_merge($type_2->parent_nodes, $type_1->parent_nodes), 'possibly_undefined' => $possibly_undefined ?? $type_2->possibly_undefined]); } } elseif ($type_2->failed_reconciliation) { return $type_1->setProperties(['parent_nodes' => array_merge($type_1->parent_nodes, $type_2->parent_nodes), 'possibly_undefined' => $possibly_undefined ?? $type_1->possibly_undefined]); } $combined_type = TypeCombiner::combine(array_merge(array_values($type_1->getAtomicTypes()), array_values($type_2->getAtomicTypes())), $codebase, $overwrite_empty_array, $allow_mixed_union, $literal_limit); if (!$type_1->initialized || !$type_2->initialized) { $combined_type->initialized = \false; } if ($type_1->from_docblock || $type_2->from_docblock) { $combined_type->from_docblock = \true; } if ($type_1->from_calculation || $type_2->from_calculation) { $combined_type->from_calculation = \true; } if ($type_1->ignore_nullable_issues || $type_2->ignore_nullable_issues) { $combined_type->ignore_nullable_issues = \true; } if ($type_1->ignore_falsable_issues || $type_2->ignore_falsable_issues) { $combined_type->ignore_falsable_issues = \true; } if ($type_1->explicit_never || $type_2->explicit_never) { $combined_type->explicit_never = \true; } if ($type_1->had_template && $type_2->had_template) { $combined_type->had_template = \true; } if ($type_1->reference_free && $type_2->reference_free) { $combined_type->reference_free = \true; } if ($both_failed_reconciliation) { $combined_type->failed_reconciliation = \true; } } if ($possibly_undefined !== null) { $combined_type->possibly_undefined = $possibly_undefined; } elseif ($type_1->possibly_undefined || $type_2->possibly_undefined) { $combined_type->possibly_undefined = \true; } if ($type_1->possibly_undefined_from_try || $type_2->possibly_undefined_from_try) { $combined_type->possibly_undefined_from_try = \true; } if ($type_1->parent_nodes || $type_2->parent_nodes) { $combined_type->parent_nodes = $type_1->parent_nodes + $type_2->parent_nodes; } if ($type_1->by_ref || $type_2->by_ref) { $combined_type->by_ref = \true; } return $combined_type; } /** * Combines two union types into one via an intersection */ public static function intersectUnionTypes(?Union $type_1, ?Union $type_2, \Psalm\Codebase $codebase) : ?Union { if ($type_2 === null && $type_1 === null) { throw new UnexpectedValueException('At least one type must be provided to combine'); } if ($type_1 === null) { return $type_2; } if ($type_2 === null) { return $type_1; } if ($type_1 === $type_2) { return $type_1; } $intersection_performed = \false; $type_1_mixed = $type_1->isMixed(); $type_2_mixed = $type_2->isMixed(); $possibly_undefined = $type_1->possibly_undefined && $type_2->possibly_undefined; if ($type_1_mixed && $type_2_mixed) { $combined_type = new Union([new TMixed()], ['possibly_undefined' => $possibly_undefined]); } else { $both_failed_reconciliation = \false; if ($type_1->failed_reconciliation) { if ($type_2->failed_reconciliation) { $both_failed_reconciliation = \true; } else { return $type_2; } } elseif ($type_2->failed_reconciliation) { return $type_1; } if ($type_1_mixed) { $combined_type = $type_2->getBuilder(); $intersection_performed = \true; } elseif ($type_2_mixed) { $combined_type = $type_1->getBuilder(); $intersection_performed = \true; } else { $combined_type = null; foreach ($type_1->getAtomicTypes() as $type_1_atomic) { foreach ($type_2->getAtomicTypes() as $type_2_atomic) { $intersection_atomic = self::intersectAtomicTypes($type_1_atomic, $type_2_atomic, $codebase, $intersection_performed); if (null !== $intersection_atomic) { if (null === $combined_type) { $combined_type = new MutableUnion([$intersection_atomic]); } else { $combined_type->addType($intersection_atomic); } } } } } //if a type is contained by the other, the intersection is the narrowest type if (!$intersection_performed) { $type_1_in_2 = UnionTypeComparator::isContainedBy($codebase, $type_1, $type_2); $type_2_in_1 = UnionTypeComparator::isContainedBy($codebase, $type_2, $type_1); if ($type_1_in_2) { $intersection_performed = \true; $combined_type = $type_1->getBuilder(); } elseif ($type_2_in_1) { $intersection_performed = \true; $combined_type = $type_2->getBuilder(); } } if ($combined_type !== null) { if (!$type_1->initialized && !$type_2->initialized) { $combined_type->initialized = \false; } if ($type_1->possibly_undefined_from_try && $type_2->possibly_undefined_from_try) { $combined_type->possibly_undefined_from_try = \true; } if ($type_1->from_docblock && $type_2->from_docblock) { $combined_type->from_docblock = \true; } if ($type_1->from_calculation && $type_2->from_calculation) { $combined_type->from_calculation = \true; } if ($type_1->ignore_nullable_issues && $type_2->ignore_nullable_issues) { $combined_type->ignore_nullable_issues = \true; } if ($type_1->ignore_falsable_issues && $type_2->ignore_falsable_issues) { $combined_type->ignore_falsable_issues = \true; } if ($both_failed_reconciliation) { $combined_type->failed_reconciliation = \true; } $combined_type->possibly_undefined = $possibly_undefined; $combined_type = $combined_type->freeze(); } } if (!$intersection_performed && $type_1->getId() !== $type_2->getId()) { return null; } return $combined_type; } private static function intersectAtomicTypes(Atomic $type_1_atomic, Atomic $type_2_atomic, \Psalm\Codebase $codebase, bool &$intersection_performed) : ?Atomic { $intersection_atomic = null; $wider_type = null; if ($type_1_atomic instanceof TNamedObject && $type_2_atomic instanceof TNamedObject) { if ($type_1_atomic->value === $type_2_atomic->value && get_class($type_1_atomic) === TNamedObject::class && get_class($type_2_atomic) !== TNamedObject::class) { $intersection_atomic = $type_2_atomic; $wider_type = $type_1_atomic; $intersection_performed = \true; } elseif ($type_1_atomic->value === $type_2_atomic->value && get_class($type_2_atomic) === TNamedObject::class && get_class($type_1_atomic) !== TNamedObject::class) { $intersection_atomic = $type_1_atomic; $wider_type = $type_2_atomic; $intersection_performed = \true; } } if ($type_1_atomic instanceof TInt && $type_2_atomic instanceof TInt) { $int_intersection = TIntRange::intersectIntRanges(TIntRange::convertToIntRange($type_1_atomic), TIntRange::convertToIntRange($type_2_atomic)); if ($int_intersection && ($int_intersection->min_bound !== null || $int_intersection->max_bound !== null)) { $intersection_performed = \true; if ($int_intersection->min_bound !== null && $int_intersection->min_bound === $int_intersection->max_bound) { return new TLiteralInt($int_intersection->min_bound); } return $int_intersection; } } if (null === $intersection_atomic) { if (AtomicTypeComparator::isContainedBy($codebase, $type_2_atomic, $type_1_atomic)) { $intersection_atomic = $type_2_atomic; $wider_type = $type_1_atomic; $intersection_performed = \true; } elseif (AtomicTypeComparator::isContainedBy($codebase, $type_1_atomic, $type_2_atomic)) { $intersection_atomic = $type_1_atomic; $wider_type = $type_2_atomic; $intersection_performed = \true; } if ($intersection_atomic && !self::hasIntersection($type_1_atomic) && !self::hasIntersection($type_2_atomic)) { return $intersection_atomic; } } if (self::mayHaveIntersection($type_1_atomic, $codebase) && self::mayHaveIntersection($type_2_atomic, $codebase)) { /** @psalm-suppress TypeDoesNotContainType */ if ($type_1_atomic instanceof TNamedObject && $type_2_atomic instanceof TNamedObject) { try { $first = $codebase->classlike_storage_provider->get($type_1_atomic->value); $second = $codebase->classlike_storage_provider->get($type_2_atomic->value); $first_is_class = !$first->is_interface && !$first->is_trait; $second_is_class = !$second->is_interface && !$second->is_trait; if ($first_is_class && $second_is_class) { return $intersection_atomic; } } catch (InvalidArgumentException $e) { // Ignore non-existing classes during initial scan } } if ($intersection_atomic === null && $wider_type === null) { $intersection_atomic = $type_1_atomic; $wider_type = $type_2_atomic; } if ($intersection_atomic === null || $wider_type === null) { throw new LogicException('$intersection_atomic and $wider_type should be both set or null.' . ' Check the preceding code for errors.' . ' Did you forget to assign one of the variables?'); } if (!self::mayHaveIntersection($intersection_atomic, $codebase) || !self::mayHaveIntersection($wider_type, $codebase)) { throw new LogicException('$intersection_atomic and $wider_type should be both support intersection.' . ' Check the preceding code for errors.'); } $intersection_performed = \true; $wider_type_clone = $wider_type->setIntersectionTypes([]); $final_intersection = array_merge([$wider_type_clone->getKey() => $wider_type_clone], $intersection_atomic->getIntersectionTypes()); $wider_type_intersection_types = $wider_type->getIntersectionTypes(); foreach ($wider_type_intersection_types as $wider_type_intersection_type) { $final_intersection[$wider_type_intersection_type->getKey()] = $wider_type_intersection_type; } return $intersection_atomic->setIntersectionTypes($final_intersection); } return $intersection_atomic; } /** * @psalm-assert-if-true TIterable|TNamedObject|TTemplateParam|TObjectWithProperties $type */ private static function mayHaveIntersection(Atomic $type, \Psalm\Codebase $codebase) : bool { if ($type instanceof TIterable || $type instanceof TTemplateParam || $type instanceof TObjectWithProperties) { return \true; } if (!$type instanceof TNamedObject) { return \false; } try { $storage = $codebase->classlike_storage_provider->get($type->value); } catch (InvalidArgumentException $e) { // Ignore non-existing classes during initial scan return \true; } return !$storage->final; } private static function hasIntersection(Atomic $type) : bool { return ($type instanceof TIterable || $type instanceof TNamedObject || $type instanceof TTemplateParam || $type instanceof TObjectWithProperties) && $type->extra_types; } } */ public function getAliasedClassesFlipped() : array; /** * @return array */ public function getAliasedClassesFlippedReplaceable() : array; public function getFQCLN() : ?string; public function getClassName() : ?string; public function getParentFQCLN() : ?string; /** * @return array>|null */ public function getTemplateTypeMap() : ?array; public function setRootFilePath(string $file_path, string $file_name) : void; public function hasParentFilePath(string $file_path) : bool; public function hasAlreadyRequiredFilePath(string $file_path) : bool; public function getRequireNesting() : int; public function isStatic() : bool; public function getSource() : \Psalm\StatementsSource; public function getCodebase() : \Psalm\Codebase; /** * Get a list of suppressed issues * * @return array */ public function getSuppressedIssues() : array; /** * @param list $new_issues */ public function addSuppressedIssues(array $new_issues) : void; /** * @param list $new_issues */ public function removeSuppressedIssues(array $new_issues) : void; public function getNodeTypeProvider() : \Psalm\NodeTypeProvider; } $words */ public static function listToPhrase(array $words) : string { if (count($words) === 1) { return reset($words); } if (count($words) === 2) { return implode(" and ", $words); } $last_word = array_pop($words); $phrase = implode(", ", $words); $phrase = "{$phrase}, and {$last_word}"; return $phrase; } } code_location = $code_location; $this->message = $message; $this->function_id = $function_id ? strtolower($function_id) : null; $this->origin_location = $origin_location; } } dupe_key = $property_id; } } dupe_key = strtolower($method_id); } } dupe_key = $property_id; } } code_location = $code_location; $this->message = $message; $this->function_id = $function_id ? strtolower($function_id) : null; $this->origin_location = $origin_location; } } origin_location = $origin_location; } } dupe_key = $dupe_key; } } method_id = strtolower($method_id); } } fq_classlike_name = $fq_classlike_name; } } var_name = strtolower($var_name); } } dupe_key = $property_id; } } dupe_key = $dupe_key; } } const_id = $const_id; } } function_id = strtolower($function_id); } } */ public const SHORTCODE = 0; /** * @var CodeLocation * @readonly */ public $code_location; /** * @var string * @readonly */ public $message; /** * @var ?string */ public $dupe_key; public function __construct(string $message, CodeLocation $code_location) { $this->code_location = $code_location; $this->message = $message; } public function getShortLocationWithPrevious() : string { $previous_text = ''; if ($this->code_location->previous_location) { $previous_location = $this->code_location->previous_location; $previous_text = ' from ' . $previous_location->file_name . ':' . $previous_location->getLineNumber(); } return $this->code_location->file_name . ':' . $this->code_location->getLineNumber() . $previous_text; } public function getShortLocation() : string { return $this->code_location->file_name . ':' . $this->code_location->getLineNumber(); } public function getFilePath() : string { return $this->code_location->file_path; } public static function getIssueType() : string { $fqcn_parts = explode('\\', static::class); return array_pop($fqcn_parts); } public function toIssueData(string $severity) : IssueData { $location = $this->code_location; $selection_bounds = $location->getSelectionBounds(); $snippet_bounds = $location->getSnippetBounds(); return new IssueData($severity, $location->getLineNumber(), $location->getEndLineNumber(), static::getIssueType(), $this->message, $location->file_name, $location->file_path, $location->getSnippet(), $location->getSelectedText(), $selection_bounds[0], $selection_bounds[1], $snippet_bounds[0], $snippet_bounds[1], $location->getColumn(), $location->getEndColumn(), static::SHORTCODE, static::ERROR_LEVEL, $this instanceof \Psalm\Issue\TaintedInput ? $this->getTaintTrace() : null, $this instanceof \Psalm\Issue\MixedIssue && ($origin_location = $this->getOriginalLocation()) ? [\Psalm\Issue\TaintedInput::nodeToDataFlowNodeData($origin_location, 'The type of ' . $location->getSelectedText() . ' is sourced from here')] : null, $this->dupe_key); } } code_location = $code_location; $this->message = $message; $this->origin_location = $origin_location; } public function getMixedOriginMessage() : string { return $this->message . ($this->origin_location ? '. Consider improving the type at ' . $this->origin_location->getShortSummary() : ''); } public function getOriginalLocation() : ?CodeLocation { return $this->origin_location; } } */ public const SHORTCODE = 205; /** * @var string * @readonly */ public $journey_text; /** * @var list * @readonly */ public $journey = []; /** * @param list $journey */ public function __construct(string $message, CodeLocation $code_location, array $journey, string $journey_text) { parent::__construct($message, $code_location); $this->journey = $journey; $this->journey_text = $journey_text; } /** * @return list */ public function getTaintTrace() : array { $nodes = []; foreach ($this->journey as ['location' => $location, 'label' => $label, 'entry_path_type' => $path_type]) { if ($location) { $nodes[] = self::nodeToDataFlowNodeData($location, $label); } else { $nodes[] = ['label' => $label, 'entry_path_type' => $path_type]; } } return $nodes; } public static function nodeToDataFlowNodeData(CodeLocation $location, string $label) : DataFlowNodeData { $selection_bounds = $location->getSelectionBounds(); $snippet_bounds = $location->getSnippetBounds(); return new DataFlowNodeData($label, $location->getLineNumber(), $location->getEndLineNumber(), $location->file_name, $location->file_path, $location->getSnippet(), $selection_bounds[0], $selection_bounds[1], $snippet_bounds[0], $location->getColumn(), $location->getEndColumn()); } public function getJourneyMessage() : string { return $this->message . ' in path: ' . $this->journey_text; } } dupe_key = $dupe_key; } } dupe_key = $dupe_key; } } dupe_key = strtolower($method_id); } } dupe_key = $dupe_key; } } dupe_key = $dupe_key; } } property_id = $property_id; } } function_id = $function_id ? strtolower($function_id) : null; } } > */ protected static $issues_data = []; /** * @var array */ protected static $console_issues = []; /** * @var array */ protected static $fixable_issue_counts = []; /** * @var int */ protected static $error_count = 0; /** * @var array */ protected static $emitted = []; /** @var int */ protected static $recording_level = 0; /** @var array> */ protected static $recorded_issues = []; /** * @var array> */ protected static $unused_suppressions = []; /** * @var array> */ protected static $used_suppressions = []; /** @var array */ private static array $server = []; /** * This will add an issue to be emitted if it's not suppressed and return if it has been added * * @param string[] $suppressed_issues */ public static function accepts(CodeIssue $e, array $suppressed_issues = [], bool $is_fixable = \false) : bool { if (self::isSuppressed($e, $suppressed_issues)) { return \false; } return self::add($e, $is_fixable); } /** * This will add an issue to be emitted if it's not suppressed * * @param string[] $suppressed_issues */ public static function maybeAdd(CodeIssue $e, array $suppressed_issues = [], bool $is_fixable = \false) : void { self::accepts($e, $suppressed_issues, $is_fixable); } /** * This is part of the findUnusedPsalmSuppress feature */ public static function addUnusedSuppression(string $file_path, int $offset, string $issue_type) : void { if (strpos($issue_type, 'Tainted') === 0) { return; } if (isset(self::$used_suppressions[$file_path][$offset])) { return; } if (!isset(self::$unused_suppressions[$file_path])) { self::$unused_suppressions[$file_path] = []; } self::$unused_suppressions[$file_path][$offset] = $offset + strlen($issue_type) - 1; } /** * This will return false if an issue is ready to be added for emission. Reasons for not returning false include: * - The issue is suppressed in config * - We're in a recording state * - The issue is included in the list of issues to be suppressed in param * * @param string[] $suppressed_issues */ public static function isSuppressed(CodeIssue $e, array $suppressed_issues = []) : bool { $config = \Psalm\Config::getInstance(); $fqcn_parts = explode('\\', get_class($e)); $issue_type = array_pop($fqcn_parts); $file_path = $e->getFilePath(); if (!$e instanceof ConfigIssue && !$config->reportIssueInFile($issue_type, $file_path)) { return \true; } $suppressed_issue_position = array_search($issue_type, $suppressed_issues); if ($suppressed_issue_position !== \false) { if (is_int($suppressed_issue_position)) { self::$used_suppressions[$file_path][$suppressed_issue_position] = \true; } return \true; } $parent_issue_type = \Psalm\Config::getParentIssueType($issue_type); if ($parent_issue_type) { $suppressed_issue_position = array_search($parent_issue_type, $suppressed_issues); if ($suppressed_issue_position !== \false) { if (is_int($suppressed_issue_position)) { self::$used_suppressions[$file_path][$suppressed_issue_position] = \true; } return \true; } } $suppress_all_position = $config->disable_suppress_all ? \false : array_search('all', $suppressed_issues); if ($suppress_all_position !== \false) { if (is_int($suppress_all_position)) { self::$used_suppressions[$file_path][$suppress_all_position] = \true; } return \true; } $reporting_level = $config->getReportingLevelForIssue($e); if ($reporting_level === \Psalm\Config::REPORT_SUPPRESS) { return \true; } if ($e->code_location->getLineNumber() === -1) { return \true; } if (self::$recording_level > 0) { self::$recorded_issues[self::$recording_level][] = $e; return \true; } return \false; } /** * Add an issue to be emitted. This method should normally not be used! Use IssueBuffer::maybeAdd instead. * * @psalm-internal Psalm\IssueBuffer * @psalm-internal Psalm\Type\Reconciler::getValueForKey * @throws CodeException */ public static function add(CodeIssue $e, bool $is_fixable = \false) : bool { $config = \Psalm\Config::getInstance(); $project_analyzer = ProjectAnalyzer::getInstance(); $codebase = $project_analyzer->getCodebase(); $event = new BeforeAddIssueEvent($e, $is_fixable, $codebase); if ($config->eventDispatcher->dispatchBeforeAddIssue($event) === \false) { return \false; } $fqcn_parts = explode('\\', get_class($e)); $issue_type = array_pop($fqcn_parts); if (!$project_analyzer->show_issues) { return \false; } $is_tainted = strpos($issue_type, 'Tainted') === 0; if ($codebase->taint_flow_graph && !$is_tainted) { return \false; } $reporting_level = $config->getReportingLevelForIssue($e); if ($reporting_level === \Psalm\Config::REPORT_SUPPRESS) { return \false; } if ($config->debug_emitted_issues) { ob_start(); debug_print_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); $trace = ob_get_clean(); fwrite(STDERR, "\nEmitting {$e->getShortLocation()} {$issue_type} {$e->message}\n{$trace}\n"); } // Make issue type for trace variable specific ("Trace" => "Trace~$var"). $trace_var = $issue_type === 'Trace' && preg_match('/^(\\$.+?):/', $e->message, $m) === 1 && isset($m[1]) ? '~' . $m[1] : ''; $emitted_key = $issue_type . $trace_var . '-' . $e->getShortLocation() . ':' . $e->code_location->getColumn() . ' ' . ($e->dupe_key ?? $e->message); if ($reporting_level === \Psalm\Config::REPORT_INFO) { if ($is_tainted || !self::alreadyEmitted($emitted_key)) { self::$issues_data[$e->getFilePath()][] = $e->toIssueData(\Psalm\Config::REPORT_INFO); if ($is_fixable) { self::addFixableIssue($issue_type); } } return \false; } if ($config->throw_exception) { FileAnalyzer::clearCache(); $message = $e instanceof TaintedInput ? $e->getJourneyMessage() : ($e instanceof MixedIssue ? $e->getMixedOriginMessage() : $e->message); throw new CodeException($issue_type . ' - ' . $e->getShortLocationWithPrevious() . ':' . $e->code_location->getColumn() . ' - ' . $message); } if ($is_tainted || !self::alreadyEmitted($emitted_key)) { ++self::$error_count; self::$issues_data[$e->getFilePath()][] = $e->toIssueData(\Psalm\Config::REPORT_ERROR); if ($is_fixable) { self::addFixableIssue($issue_type); } } return \true; } private static function removeRecordedIssue(string $issue_type, int $file_offset) : void { $recorded_issues = self::$recorded_issues[self::$recording_level]; $filtered_issues = []; foreach ($recorded_issues as $issue) { [$from] = $issue->code_location->getSelectionBounds(); if ($issue::getIssueType() !== $issue_type || $from !== $file_offset) { $filtered_issues[] = $issue; } } self::$recorded_issues[self::$recording_level] = $filtered_issues; } /** * This will try to remove an issue that has been added for emission */ public static function remove(string $file_path, string $issue_type, int $file_offset) : void { if (self::$recording_level > 0) { self::removeRecordedIssue($issue_type, $file_offset); } if (!isset(self::$issues_data[$file_path])) { return; } $filtered_issues = []; foreach (self::$issues_data[$file_path] as $issue) { if ($issue->type !== $issue_type || $issue->from !== $file_offset) { $filtered_issues[] = $issue; } } if (empty($filtered_issues)) { unset(self::$issues_data[$file_path]); } else { self::$issues_data[$file_path] = $filtered_issues; } } public static function addFixableIssue(string $issue_type) : void { if (isset(self::$fixable_issue_counts[$issue_type])) { self::$fixable_issue_counts[$issue_type]++; } else { self::$fixable_issue_counts[$issue_type] = 1; } } /** * @return array> */ public static function getIssuesData() : array { return self::$issues_data; } /** * @return list */ public static function getIssuesDataForFile(string $file_path) : array { return self::$issues_data[$file_path] ?? []; } /** * @return array */ public static function getFixableIssues() : array { return self::$fixable_issue_counts; } /** * @param array $fixable_issue_counts */ public static function addFixableIssues(array $fixable_issue_counts) : void { foreach ($fixable_issue_counts as $issue_type => $count) { if (isset(self::$fixable_issue_counts[$issue_type])) { self::$fixable_issue_counts[$issue_type] += $count; } else { self::$fixable_issue_counts[$issue_type] = $count; } } } /** * @return array> */ public static function getUnusedSuppressions() : array { return self::$unused_suppressions; } /** * @return array> */ public static function getUsedSuppressions() : array { return self::$used_suppressions; } /** * @param array> $unused_suppressions */ public static function addUnusedSuppressions(array $unused_suppressions) : void { self::$unused_suppressions += $unused_suppressions; } /** * @param array> $used_suppressions */ public static function addUsedSuppressions(array $used_suppressions) : void { foreach ($used_suppressions as $file => $offsets) { if (!isset(self::$used_suppressions[$file])) { self::$used_suppressions[$file] = $offsets; } else { self::$used_suppressions[$file] += $offsets; } } } public static function processUnusedSuppressions(FileProvider $file_provider) : void { $config = \Psalm\Config::getInstance(); foreach (self::$unused_suppressions as $file_path => $offsets) { if (!$offsets) { continue; } if (!$config->isInProjectDirs($file_path)) { continue; } $file_contents = $file_provider->getContents($file_path); foreach ($offsets as $start => $end) { if (isset(self::$used_suppressions[$file_path][$start])) { continue; } self::add(new UnusedPsalmSuppress('This suppression is never used', new Raw($file_contents, $file_path, $config->shortenFileName($file_path), $start, $end))); } } } public static function getErrorCount() : int { return self::$error_count; } /** * @param array> $issues_data */ public static function addIssues(array $issues_data) : void { foreach ($issues_data as $file_path => $file_issues) { foreach ($file_issues as $issue) { $emitted_key = $issue->type . '-' . $issue->file_name . ':' . $issue->line_from . ':' . $issue->column_from . ' ' . ($issue->dupe_key ?? $issue->message); if (!self::alreadyEmitted($emitted_key)) { self::$issues_data[$file_path][] = $issue; } } } } /** * @param array}>> $issue_baseline */ public static function finish(ProjectAnalyzer $project_analyzer, bool $is_full, float $start_time, bool $add_stats = \false, array $issue_baseline = []) : void { if (!$project_analyzer->stdout_report_options) { throw new UnexpectedValueException('Cannot finish without stdout report options'); } $codebase = $project_analyzer->getCodebase(); foreach ($codebase->config->config_issues as $issue) { self::maybeAdd($issue); } $error_count = 0; $info_count = 0; $issues_data = []; if (self::$issues_data) { if (in_array($project_analyzer->stdout_report_options->format, [\Psalm\Report::TYPE_CONSOLE, \Psalm\Report::TYPE_PHP_STORM])) { echo "\n"; } ksort(self::$issues_data); foreach (self::$issues_data as $file_path => $file_issues) { usort($file_issues, static fn(IssueData $d1, IssueData $d2): int => [$d1->file_path, $d1->line_from, $d1->column_from] <=> [$d2->file_path, $d2->line_from, $d2->column_from]); self::$issues_data[$file_path] = $file_issues; } // make a copy so what gets saved in cache is unaffected by baseline $issues_data = self::$issues_data; if (!empty($issue_baseline)) { // Set severity for issues in baseline to INFO foreach ($issues_data as $file_path => $file_issues) { foreach ($file_issues as $key => $issue_data) { $file = $issue_data->file_name; $file = str_replace('\\', '/', $file); $type = $issue_data->type; if (isset($issue_baseline[$file][$type]) && $issue_baseline[$file][$type]['o'] > 0) { if ($issue_baseline[$file][$type]['o'] === count($issue_baseline[$file][$type]['s'])) { $position = array_search(str_replace("\r\n", "\n", trim($issue_data->selected_text)), $issue_baseline[$file][$type]['s'], \true); if ($position !== \false) { $issue_data->severity = \Psalm\Config::REPORT_INFO; array_splice($issue_baseline[$file][$type]['s'], $position, 1); $issue_baseline[$file][$type]['o']--; } } else { $issue_baseline[$file][$type]['s'] = []; $issue_data->severity = \Psalm\Config::REPORT_INFO; $issue_baseline[$file][$type]['o']--; } } $issues_data[$file_path][$key] = $issue_data; } } if ($codebase->config->find_unused_baseline_entry) { foreach ($issue_baseline as $file_path => $issues) { foreach ($issues as $issue_name => $issue) { if ($issue['o'] !== 0) { $issues_data[$file_path][] = new IssueData(\Psalm\Config::REPORT_ERROR, 0, 0, UnusedBaselineEntry::getIssueType(), sprintf('Baseline for issue "%s" has %d extra %s.', $issue_name, $issue['o'], $issue['o'] === 1 ? 'entry' : 'entries'), $file_path, '', '', '', 0, 0, 0, 0, 0, 0, UnusedBaselineEntry::SHORTCODE, UnusedBaselineEntry::ERROR_LEVEL); } } } } } } echo self::getOutput($issues_data, $project_analyzer->stdout_report_options, $codebase->analyzer->getTotalTypeCoverage($codebase)); foreach ($issues_data as $file_issues) { foreach ($file_issues as $issue_data) { if ($issue_data->severity === \Psalm\Config::REPORT_ERROR) { ++$error_count; } else { ++$info_count; } } } if ($codebase->config->eventDispatcher->after_analysis) { $source_control_info = null; $build_info = (new BuildInfoCollector(self::$server))->collect(); try { $source_control_info = (new GitInfoCollector())->collect(); } catch (RuntimeException $e) { // do nothing } /** @psalm-suppress ArgumentTypeCoercion due to Psalm bug */ $event = new AfterAnalysisEvent($codebase, $issues_data, $build_info, $source_control_info); $codebase->config->eventDispatcher->dispatchAfterAnalysis($event); } foreach ($project_analyzer->generated_report_options as $report_options) { if (!$report_options->output_path) { throw new UnexpectedValueException('Output path should not be null here'); } $folder = dirname($report_options->output_path); if (!is_dir($folder) && !mkdir($folder, 0777, \true) && !is_dir($folder)) { throw new RuntimeException(sprintf('Directory "%s" was not created', $folder)); } file_put_contents($report_options->output_path, self::getOutput($issues_data, $report_options, $codebase->analyzer->getTotalTypeCoverage($codebase))); } if (in_array($project_analyzer->stdout_report_options->format, [\Psalm\Report::TYPE_CONSOLE, \Psalm\Report::TYPE_PHP_STORM])) { echo str_repeat('-', 30) . "\n"; if ($error_count) { echo ($project_analyzer->stdout_report_options->use_color ? "\x1b[0;31m" . $error_count . " errors\x1b[0m" : $error_count . ' errors') . ' found' . "\n"; } else { self::printSuccessMessage($project_analyzer); } $show_info = $project_analyzer->stdout_report_options->show_info; $show_suggestions = $project_analyzer->stdout_report_options->show_suggestions; if ($info_count && ($show_info || $show_suggestions)) { echo str_repeat('-', 30) . "\n"; echo $info_count . ' other issues found.' . "\n"; if (!$show_info) { echo 'You can display them with ' . ($project_analyzer->stdout_report_options->use_color ? "\x1b[30;48;5;195m--show-info=true\x1b[0m" : '--show-info=true') . "\n"; } } if (self::$fixable_issue_counts && $show_suggestions && !$codebase->taint_flow_graph) { echo str_repeat('-', 30) . "\n"; $total_count = array_sum(self::$fixable_issue_counts); $command = '--alter --issues=' . implode(',', array_keys(self::$fixable_issue_counts)); $command .= ' --dry-run'; echo 'Psalm can automatically fix ' . $total_count . ($show_info ? ' issues' : ' of these issues') . ".\n" . 'Run Psalm again with ' . "\n" . ($project_analyzer->stdout_report_options->use_color ? "\x1b[30;48;5;195m" . $command . "\x1b[0m" : $command) . "\n" . 'to see what it can fix.' . "\n"; } echo str_repeat('-', 30) . "\n" . "\n"; if ($start_time) { echo 'Checks took ' . number_format(microtime(\true) - $start_time, 2) . ' seconds'; echo ' and used ' . number_format(memory_get_peak_usage() / (1024 * 1024), 3) . 'MB of memory' . "\n"; $analysis_summary = $codebase->analyzer->getTypeInferenceSummary($codebase); echo $analysis_summary . "\n"; if ($add_stats) { echo '-----------------' . "\n"; echo $codebase->analyzer->getNonMixedStats(); echo "\n"; } if ($project_analyzer->debug_performance) { echo '-----------------' . "\n"; echo 'Slow-to-analyze functions' . "\n"; echo '-----------------' . "\n\n"; $function_timings = $codebase->analyzer->getFunctionTimings(); arsort($function_timings); $i = 0; foreach ($function_timings as $function_id => $time) { if (++$i > 10) { break; } echo $function_id . ': ' . round(1000 * $time, 2) . 'ms per node' . "\n"; } echo "\n"; } } } if ($is_full && $start_time) { $codebase->file_reference_provider->removeDeletedFilesFromReferences(); if ($project_analyzer->project_cache_provider) { $project_analyzer->project_cache_provider->processSuccessfulRun($start_time, PSALM_VERSION); } } if ($error_count && !($codebase->taint_flow_graph && $project_analyzer->generated_report_options && isset($_SERVER['GITHUB_WORKFLOW']))) { exit(2); } } public static function printSuccessMessage(ProjectAnalyzer $project_analyzer) : void { if (!$project_analyzer->stdout_report_options) { throw new UnexpectedValueException('Cannot print success message without stdout report options'); } // this message will be printed $message = "No errors found!"; // color block will contain this amount of characters $blockSize = 30; // message with prepended and appended whitespace to be same as $blockSize $messageWithPadding = str_repeat(' ', 7) . $message . str_repeat(' ', 7); // top side of the color block $paddingTop = str_repeat(' ', $blockSize); // bottom side of the color block $paddingBottom = str_repeat(' ', $blockSize); // background color, 42 = green $background = "42"; // foreground/text color, 30 = black $foreground = "30"; // text style, 1 = bold $style = "1"; if ($project_analyzer->stdout_report_options->use_color) { echo "\x1b[{$background};{$style}m{$paddingTop}\x1b[0m" . "\n"; echo "\x1b[{$background};{$foreground};{$style}m{$messageWithPadding}\x1b[0m" . "\n"; echo "\x1b[{$background};{$style}m{$paddingBottom}\x1b[0m" . "\n"; } else { echo "\n"; echo "{$messageWithPadding}\n"; echo "\n"; } } /** * @param array> $issues_data * @param array{int, int} $mixed_counts */ public static function getOutput(array $issues_data, ReportOptions $report_options, array $mixed_counts = [0, 0]) : string { $total_expression_count = $mixed_counts[0] + $mixed_counts[1]; $mixed_expression_count = $mixed_counts[0]; $normalized_data = $issues_data === [] ? [] : array_merge(...array_values($issues_data)); $format = $report_options->format; switch ($format) { case \Psalm\Report::TYPE_COMPACT: $output = new CompactReport($normalized_data, self::$fixable_issue_counts, $report_options); break; case \Psalm\Report::TYPE_EMACS: $output = new EmacsReport($normalized_data, self::$fixable_issue_counts, $report_options); break; case \Psalm\Report::TYPE_TEXT: $output = new TextReport($normalized_data, self::$fixable_issue_counts, $report_options); break; case \Psalm\Report::TYPE_JSON: $output = new JsonReport($normalized_data, self::$fixable_issue_counts, $report_options); break; case \Psalm\Report::TYPE_BY_ISSUE_LEVEL: $output = new ByIssueLevelAndTypeReport($normalized_data, self::$fixable_issue_counts, $report_options); break; case \Psalm\Report::TYPE_JSON_SUMMARY: $output = new JsonSummaryReport($normalized_data, self::$fixable_issue_counts, $report_options, $mixed_expression_count, $total_expression_count); break; case \Psalm\Report::TYPE_SONARQUBE: $output = new SonarqubeReport($normalized_data, self::$fixable_issue_counts, $report_options); break; case \Psalm\Report::TYPE_PYLINT: $output = new PylintReport($normalized_data, self::$fixable_issue_counts, $report_options); break; case \Psalm\Report::TYPE_CHECKSTYLE: $output = new CheckstyleReport($normalized_data, self::$fixable_issue_counts, $report_options); break; case \Psalm\Report::TYPE_XML: $output = new XmlReport($normalized_data, self::$fixable_issue_counts, $report_options); break; case \Psalm\Report::TYPE_JUNIT: $output = new JunitReport($normalized_data, self::$fixable_issue_counts, $report_options); break; case \Psalm\Report::TYPE_CONSOLE: $output = new ConsoleReport($normalized_data, self::$fixable_issue_counts, $report_options); break; case \Psalm\Report::TYPE_GITHUB_ACTIONS: $output = new GithubActionsReport($normalized_data, self::$fixable_issue_counts, $report_options); break; case \Psalm\Report::TYPE_PHP_STORM: $output = new PhpStormReport($normalized_data, self::$fixable_issue_counts, $report_options); break; case \Psalm\Report::TYPE_SARIF: $output = new SarifReport($normalized_data, self::$fixable_issue_counts, $report_options); break; case \Psalm\Report::TYPE_CODECLIMATE: $output = new CodeClimateReport($normalized_data, self::$fixable_issue_counts, $report_options); break; case \Psalm\Report::TYPE_COUNT: $output = new CountReport($normalized_data, self::$fixable_issue_counts, $report_options); break; default: throw new RuntimeException('Unexpected report format: ' . $report_options->format); } return $output->create(); } protected static function alreadyEmitted(string $message) : bool { $sham = sha1($message); if (isset(self::$emitted[$sham])) { return \true; } self::$emitted[$sham] = \true; return \false; } public static function clearCache() : void { self::$issues_data = []; self::$emitted = []; self::$error_count = 0; self::$recording_level = 0; self::$recorded_issues = []; self::$console_issues = []; self::$unused_suppressions = []; self::$used_suppressions = []; } /** * @return array> */ public static function clear() : array { $current_data = self::$issues_data; self::$issues_data = []; self::$emitted = []; return $current_data; } /** * Return whether or not we're in a recording state regarding startRecording/stopRecording status */ public static function isRecording() : bool { return self::$recording_level > 0; } /** * Increase the recording level in order to start recording issues instead of adding them while in a loop */ public static function startRecording() : void { ++self::$recording_level; self::$recorded_issues[self::$recording_level] = []; } /** * Decrease the recording level after leaving a loop * * @see startRecording */ public static function stopRecording() : void { if (self::$recording_level === 0) { throw new UnexpectedValueException('Cannot stop recording - already at base level'); } --self::$recording_level; } /** * This will return the recorded issues for the current recording level * * @return array */ public static function clearRecordingLevel() : array { if (self::$recording_level === 0) { throw new UnexpectedValueException('Not currently recording'); } $recorded_issues = self::$recorded_issues[self::$recording_level]; self::$recorded_issues[self::$recording_level] = []; return $recorded_issues; } /** * This will try to add issues that has been retrieved through clearRecordingLevel or record them at a lower level */ public static function bubbleUp(CodeIssue $e) : void { if (self::$recording_level === 0) { self::add($e); return; } self::$recorded_issues[self::$recording_level][] = $e; } /** * @internal * @param array $server */ public static final function captureServer(array $server) : void { self::$server = $server; } } */ final class CodeClimateReport extends Report { public function create() : string { $options = $this->pretty ? Json::PRETTY : Json::DEFAULT; $issues_data = array_map([$this, 'mapToNewStructure'], $this->issues_data); return Json::encode(array_values($issues_data), $options) . "\n"; } /** * convert our own severity to CodeClimate format * Values can be : info, minor, major, critical, or blocker */ protected function convertSeverity(string $input) : string { if (Config::REPORT_INFO === $input) { return 'info'; } if (Config::REPORT_ERROR === $input) { return 'critical'; } if (Config::REPORT_SUPPRESS === $input) { return 'minor'; } // unknown cases ? fallback return 'critical'; } /** * calculate a unique fingerprint for a given issue */ protected function calculateFingerprint(IssueData $issue) : string { return md5($issue->type . $issue->message . $issue->file_name . $issue->from . $issue->to); } /** * map fields to new structure. * Expected fields: * - type * - check_name * - description* * - content * - categories[] * - severity * - fingerprint* * - location.path* * - location.lines.begin* * * Fields with * are the one used by Gitlab for Code Quality */ private function mapToNewStructure(IssueData $issue) : array { return ['type' => 'issue', 'check_name' => $issue->type, 'description' => $issue->message, 'categories' => [$issue->type], 'severity' => $this->convertSeverity($issue->severity), 'fingerprint' => $this->calculateFingerprint($issue), 'location' => ['path' => $issue->file_name, 'lines' => ['begin' => $issue->line_from, 'end' => $issue->line_to]]]; } } ' . "\n"; $output .= '' . "\n"; foreach ($this->issues_data as $issue_data) { $message = sprintf('%s: %s', $issue_data->type, $issue_data->message); $output .= '' . "\n"; $output .= ' '; $output .= 'line_from . '"'; $output .= ' column="' . $issue_data->column_from . '"'; $output .= ' severity="' . $issue_data->severity . '"'; $output .= ' message="' . $this->xmlEncode($message) . '"'; $output .= '/>' . "\n"; $output .= '' . "\n"; } $output .= '' . "\n"; return $output; } } issues_data as $issue_data) { if (array_key_exists($issue_data->type, $issue_type_counts)) { $issue_type_counts[$issue_data->type]++; } else { $issue_type_counts[$issue_data->type] = 1; } } uksort($issue_type_counts, function (string $a, string $b) use($issue_type_counts) : int { $cmp_result = $issue_type_counts[$a] <=> $issue_type_counts[$b]; if ($cmp_result === 0) { return $a <=> $b; } else { return $cmp_result; } }); $output = ''; foreach ($issue_type_counts as $issue_type => $count) { $output .= "{$issue_type}: {$count}\n"; } return $output; } } '2.1.0', '$schema' => 'https://json.schemastore.org/sarif-2.1.0.json', 'runs' => [['tool' => ['driver' => ['name' => 'Psalm', 'informationUri' => 'https://psalm.dev', 'version' => \PSALM_VERSION]], 'results' => []]]]; $rules = []; foreach ($this->issues_data as $issue_data) { $rules[$issue_data->shortcode] = ['id' => (string) $issue_data->shortcode, 'name' => $issue_data->type, 'shortDescription' => ['text' => $issue_data->type], 'properties' => ['tags' => [strpos($issue_data->type, 'Tainted') === 0 ? 'security' : 'maintainability']], 'helpUri' => $issue_data->link]; $markdown_documentation_path = __DIR__ . '/../../../docs/running_psalm/issues/' . $issue_data->type . '.md'; if (file_exists($markdown_documentation_path)) { $markdown_documentation = file_get_contents($markdown_documentation_path); $rules[$issue_data->shortcode]['help']['markdown'] = $markdown_documentation; $rules[$issue_data->shortcode]['help']['text'] = $markdown_documentation; } $jsonEntry = ['ruleId' => (string) $issue_data->shortcode, 'message' => ['text' => $issue_data->message], 'level' => $issue_data->severity === Config::REPORT_ERROR ? 'error' : 'note', 'locations' => [['physicalLocation' => ['artifactLocation' => ['uri' => $issue_data->file_name], 'region' => ['startLine' => $issue_data->line_from, 'endLine' => $issue_data->line_to, 'startColumn' => $issue_data->column_from, 'endColumn' => $issue_data->column_to]]]]]; if ($issue_data->taint_trace != null) { $jsonEntry['codeFlows'] = [['message' => ['text' => 'Tracing the path from user input to insecure usage'], 'threadFlows' => [['locations' => []]]]]; foreach ($issue_data->taint_trace as $trace) { if ($trace instanceof DataFlowNodeData && $trace->line_from > 0) { $jsonEntry['codeFlows'][0]['threadFlows'][0]['locations'][] = ['location' => ['physicalLocation' => ['artifactLocation' => ['uri' => $trace->file_name], 'region' => ['startLine' => $trace->line_from, 'endLine' => $trace->line_to, 'startColumn' => $trace->column_from, 'endColumn' => $trace->column_to]]]]; } } } $report['runs'][0]['results'][] = $jsonEntry; } foreach ($rules as $rule) { $report['runs'][0]['tool']['driver']['rules'][] = $rule; } $options = $this->pretty ? Json::PRETTY : Json::DEFAULT; return Json::encode($report, $options) . "\n"; } } issues_data as $issue_data) { $output .= sprintf('%s:%s:%s:%s - %s: %s', $issue_data->file_path, $issue_data->line_from, $issue_data->column_from, $issue_data->severity === Config::REPORT_ERROR ? 'error' : 'warning', $issue_data->type, $issue_data->message) . "\n"; } return $output; } } issues_data as $issue_data) { $type = $issue_data->type; if (!isset($type_counts[$type])) { $type_counts[$type] = 0; } ++$type_counts[$type]; } $options = $this->pretty ? Json::PRETTY : Json::DEFAULT; return Json::encode(['issue_counts' => $type_counts, 'mixed_expression_count' => $this->mixed_expression_count, 'total_expression_count' => $this->total_expression_count], $options) . "\n"; } } issues_data as $issue_data) { $output .= $this->format($issue_data) . "\n" . "\n"; } return $output; } private function format(IssueData $issue_data) : string { $issue_string = ''; $is_error = $issue_data->severity === Config::REPORT_ERROR; if ($is_error) { $issue_string .= $this->use_color ? "\x1b[0;31mERROR\x1b[0m" : 'ERROR'; } else { $issue_string .= 'INFO'; } $issue_reference = $issue_data->link ? ' (see ' . $issue_data->link . ')' : ''; $issue_string .= ': ' . $issue_data->type . "\nat " . $issue_data->file_path . ':' . $issue_data->line_from . ':' . $issue_data->column_from . "\n" . $issue_data->message . $issue_reference . "\n"; if ($issue_data->taint_trace) { $issue_string .= $this->getTaintSnippets($issue_data->taint_trace); } elseif ($this->show_snippet) { $snippet = $issue_data->snippet; if (!$this->use_color) { $issue_string .= $snippet; } else { $selection_start = $issue_data->from - $issue_data->snippet_from; $selection_length = $issue_data->to - $issue_data->from; $issue_string .= substr($snippet, 0, $selection_start) . ($is_error ? "\x1b[97;41m" : "\x1b[30;47m") . substr($snippet, $selection_start, $selection_length) . "\x1b[0m" . substr($snippet, $selection_length + $selection_start) . "\n"; } } return $issue_string; } /** * @param non-empty-list $taint_trace */ private function getTaintSnippets(array $taint_trace) : string { $snippets = ''; foreach ($taint_trace as $node_data) { if ($node_data instanceof DataFlowNodeData) { $snippets .= ' ' . $node_data->label . ' - ' . $node_data->file_name . ':' . $node_data->line_from . ':' . $node_data->column_from . "\n"; if ($this->show_snippet) { $snippet = $node_data->snippet; if (!$this->use_color) { $snippets .= $snippet . "\n\n"; } else { $selection_start = $node_data->from - $node_data->snippet_from; $selection_length = $node_data->to - $node_data->from; $snippets .= substr($snippet, 0, $selection_start) . "\x1b[30;47m" . substr($snippet, $selection_start, $selection_length) . "\x1b[0m" . substr($snippet, $selection_length + $selection_start) . "\n\n"; } } } else { $snippets .= ' ' . $node_data['label'] . "\n"; $snippets .= ' ' . "\n\n"; } } return $snippets; } } issues_data as $i => $issue_data) { if (!$this->show_info && $issue_data->severity === Config::REPORT_INFO) { continue; } if ($current_file === null || $current_file !== $issue_data->file_name) { // If we're processing a new file, then wrap up the last table and render it out. if ($buffer !== null) { $table->render(); $output[] = $buffer->fetch(); } $output[] = 'FILE: ' . $issue_data->file_name . "\n"; $buffer = new BufferedOutput(); $table = new Table($buffer); $table->setHeaders(['SEVERITY', 'LINE', 'ISSUE', 'DESCRIPTION']); } $is_error = $issue_data->severity === Config::REPORT_ERROR; if ($is_error) { $severity = $this->use_color ? "\x1b[0;31mERROR\x1b[0m" : 'ERROR'; } else { $severity = strtoupper($issue_data->severity); } // Since `Table::setColumnMaxWidth` is only available in symfony/console 4.2+ we need do something similar // so we have clean tables. $message = $issue_data->message; if (strlen($message) > 70) { $message = implode("\n", str_split($message, 70)); } $table->addRow([$severity, $issue_data->line_from, $issue_data->type, $message]); $current_file = $issue_data->file_name; // If we're at the end of the issue sets, then wrap up the last table and render it out. if ($i === count($this->issues_data) - 1) { $table->render(); $output[] = $buffer->fetch(); } } return implode("\n", $output); } } sortIssuesByLevelAndType(); $output = <<