FUEL FUEL FLGlobalCompiledBlockClusterFLDebuggerStackSerializer&serializeStackFromContext:toFileNamed:FLGlobalCompiledMethodClusterFLDebuggerStackSerializer&serializeStackFromContext:toFileNamed:$FLGlobalClassCluster ByteString IdentitySet ByteSymbolFullBlockClosureIdentityDictionaryUndefinedObjectContextFLHeaderFLHookPrimitiveClusterFLHookPrimitiveCluster TimestampImageVMFLPositive8SmallIntegerClusterQFLHookPrimitiveCluster 24 April 2024 12:35:46.714307 pmImage: Pharo12.0.0SNAPSHOT [Build information: Pharo-12.0.0+SNAPSHOT.build.1496.sha.57d247160caad1bb711525b65c45e99c8d250bb5 (64 Bit)]VM: unix - x86_64 - linux-gnu - CoInterpreter VMMaker-tonel.1 uuid: dbf77ef2-7fd2-0d00-af14-ace70bccb44d Apr 15 2024 StackToRegisterMappingCogit VMMaker-tonel.1 uuid: dbf77ef2-7fd2-0d00-af14-ace70bccb44d Apr 15 2024 v10.2.0 - Commit: f4c5e2a - Date: 2024-04-09 09:21:20 +0200 FLFixedObjectCluster preMaterializationActionsadditionalObjectspostMaterializationActionsFLContextCluster senderpcstackpmethod closureOrNilreceiverFLVariableObjectCluster outerContext compiledBlocknumArgsreceiverFLDictionaryCollectionClusterFLSimpleCollectionClusterFLSubstitutionCluster     FLGlobalMetaclassClusterArrayedCollectionRunArraySTONOrderedDictionary DictionaryContextColor CollectionSet GeneratorClyLocalClassScope AsciiCharset RBScanner KeyboardKeySmallDictionarySequenceableCollectionFLGlobalCompiledBlockCluster'CurrentExecutionEnvironment activate:for: HDTestReportrunCase: HDTestReportrun HDTestReportrunTestExecutionEnvironmentrunTestCaseUnderWatchdog: RBMethodNode initializeBasicCommandLineHandleractivateSubCommand:TestExecutionEnvironment runTestCase:SpAbstractAdapterTesttestParametersCurrentExecutionEnvironment activate:for:HDReport runPackages: HDTestReportrunClasses:named:TestCaserunCaseSpAbstractAdapterTesttestParametersRSYMarkerDecorationmaxTestExecutionEnvironmentrunTestCaseUnderWatchdog: HDTestReportrunCase:TestExecutionEnvironmentrunTestCaseUnderWatchdog: HDTestReportrun HDTestReportreportTestCase:runBlock: HDTestReportrunCase: HDTestReportrunAllSocketStreamTest#testFlushLargeMessageOtherEndClosedBasicCommandLineHandleractivateSubCommand:TestExecutionEnvironmentrunTestCaseUnderWatchdog:BasicCommandLineHandleractivateTestCaserunCaseRSXMarkerDecorationmax TFTestCasetestParametersTestCaserunCase HDTestReportrunAllBasicCommandLineHandleractivate HDTestReport newLogDuring:TestExecutionEnvironment runTestCase:Setcollect:BasicCommandLineHandleractivate BlockClosure newProcess TFTestCasetestParametersTestCaserunCaseFLGlobalCompiledMethodCluster SmallIntegerodd`String asInteger. CollectionsumStringcompare: CommandLineHandler activateWith:G8Date onNextMonthx+SequenceableCollection flatCollect:zS CollectionifEmpty:¸PointfloorxBagsortedElementsRSTrue&1SequenceableCollectionwithIndexCollect:- Collection\}{SequenceableCollectionnew:streamContents:Date monthIndexfBooleanifFalse:L HDTestReport newLogDuring:}d CharacterisDashPunctuationp CollectionasStringOn:delimiter: Collection sumNumbers:SequenceableCollection,rSequenceableCollectionrunningAverage:UndefinedObject ifNotNil:SymbolisUnaryFBColorh:s:v:BooleannotLColorhex:uSequenceableCollectioncollect:>SequenceableCollectioncombinations:atATimeDo:(VPointy!TestExecutionEnvironment runTestCase:StringendsWithAColonjOrderedCollectionat:5Color hsvSaturation]IntervalasOpenInterval+StringindexOf:O BlockClosureensure:ySequenceableCollectionstreamContents:sbColor asColorrefO SmallIntegerdecimalDigitLength/Floatround:f+Number reciprocalBOrderedCollectionaddAll:}{ Collection emptyCheck Collection ifNotEmpty:3 CharacterprintStringHex]SequenceableCollectionsorted:sT Collection// Collectionsize+ BlockClosurecull:SetnewFrom:ۀSequenceableCollectionisSortedSColorgreenSequenceableCollectionseventh2SequenceableCollectionallButFirstDo:String>=SequenceableCollectiongroupsOf:atATimeCollect:?]STON classNameKeySTON toJsonString:pStringasValidSelector Collection copyWith:_D AsciiCharset toLowercase:Pointcorner:. Collectiondetect:ifNone:=;Symbol collatedBy:/Pointmax:PointguardedSequenceableCollection allButFirstx+Colorh:s:l: CharacterisDigitpNumbersecondsSequenceableCollectionkeysAndValuesDo:SequenceableCollectioncollect:thenReject:WBagasSeta CollectionasSortedCollection:+ CollectionabsStringbeginsWith:caseSensitive:W%Color r:g:b:range:N)Integer digitAt:base:TrueifFalse:AIntervalstop! Collectioncount:u BlockClosure newProcessSequenceableCollectionsortNumberprintStringBase:pColor rgbTripletClassDescriptionisInstanceSidewSequenceableCollectionfourth2String expandMacroszSequenceableCollectionpermutationsDo:pSequenceableCollectionanyOne.STON listClass Falseor:}"Boolean|LSymbolasSortFunctionSequenceableCollection atAll:putAll:OrderedCollectionasArray SSymbol descendingwColorr:g:b:StringindexOf:startingAt:StringwithUnixLineEndings( CollectioncopyWithoutAll:y#Dateweekday.CompiledMethod isExtensionzSequenceableCollection shuffleBy:>5 Collection inject:into:PathprintPathOn:delimiter:1DateasDate 1ColorfromHexString:=Trueor:SequenceableCollectionsize.SequenceableCollectionlastStringcopyReplaceAll:with:y CollectionaddIfNotPresent:[ BlockClosurevalueWithPossibleArgs:Q Collection detectMin:&Stringtrim. CollectionasArray Number nanoSeconds MagnitudebeBetween:and:SequenceableCollection allButLastx+PathbasenameWithoutExtension: TestAsserter should:raise: BlockClosuresplit:indicesDo:F ProtoObjectifNotNil:ifNil:. Collection includesAny:NumberradiansToDegreeswIntegerprintStringHexz ByteArrayunzipped'String wordBefore: Collectionadd:withOccurrences:StringexpandMacrosWith:SequenceableCollectionthird2String numericSuffixwSequenceableCollection from:to:put:_)SequenceableCollection pairsCollect:SequenceableCollectionindexOf:ifAbsent:K Collectionaverage0Number//PointsideOf:+SequenceableCollectionlast:QIntegerhumanReadableByteSizeStringzNumber raisedTo:#CurrentExecutionEnvironment activate:for: Collectionreject:thenCollect:Stringrepeat:u CollectionidentityIncludes:SortedCollectionmedianSequenceableCollection lastIndexOf:startingAt:ifAbsent:dTestCaserunCaseManagedDColor colorFrom:Number roundUpTo:StringkeywordsjuSequenceableCollectionpiecesCutWhere:do:N DateAndTimeminute8SequenceableCollectionpolynomialEval:NumberprintShowingDecimalPlaces:) Collection asCommaString! RBMethodNode initializeSequenceableCollectionreject:^Booleanor:LSequenceableCollectionindexOf:startingAt:ifAbsent:HOrderedCollection growAtLastsFalse|1 BlockClosureon:do:BBooleanifTrue:LClyLocalClassScopemetaLevelForHierarchyOf:LBasicCommandLineHandlerhandleArgument:+qSequenceableCollectionsplitOn:.Point-) Collectionsortedw Collection/. SmallIntegerhighBit String<=Number**}{SequenceableCollection atAllPut:_)SequenceableCollection atLast:put: Collectionselect:1 Metaclass classSide 1OrderedCollectionwithIndexSelect:SequenceableCollectionselect:thenDo:rPoint*cSequenceableCollectioncollect:from:to: Collectionadd:LSocketStreamTest#testFlushLargeMessageOtherEndClosed* HDTestReportrunClasses:named: Color hslSaturationStringexpandMacrosWithArguments:YStringjoin:PointscaleTo:U Charactertokenish!Symbol asMutatorN Collectionreduce:sTPointcloseTo: Collection flatCollect:aSequenceableCollection combinations!IntegerprintOn:base:length:padded:1 CollectionasBag HDTestReport runPackage:C Collectionfold:}{Falsenot String includesSubstring:caseSensitive:l SmallIntegerprintOn:base:length:padded: CollectionadaptToCollection:andSend:xSequenceableCollectionasDigitsToPower:do: CollectionaverageIfEmpty:[ CollectionminrSequenceableCollection with:collect:֟Date subtractDays:Number roundDownTo:SequenceableCollectionoverlappingPairsDo:‰SequenceableCollectionatWrap:6StringasHexSStringisAllAlphaNumericssDate weekdayIndex.NSPerlinNoise2 noise:y:z:4SequenceableCollectionargmaxkSequenceableCollectionatPin:7Numberround:.FalseifTrue:ifFalse:sNumberminute. HDTestReportrunCase:>SequenceableCollection isSortedBy: Collection\\߈ HDTestReport runSuite:e CollectionselectEverySecondString substringszSequenceableCollectionwith:do: KeyboardKey named:ifNone:PointxMSequenceableCollectionsecond2SequenceableCollection findLast:ѝDate previous:String findString:-String beginsWith:=Objectsplit:indicesDo:] TFTestCasetestParametersSymbol ascending. CollectionmaxrDatemmddyyyyzSTON fromString:OhDateonPreviousMonthzSequenceableCollectionmiddleString contractTo:% CollectionflatCollectAsSet:b| Collectionselect:thenDo: Collection allSatisfy: Collection flattened!SequenceableCollectionafter: Collectiondetect:OrderedDictionarynewFromKeys:andValues: Collection removeAllN Characterhexw CollectionanyOneY Package isTestPackagez ByteString isByteString DictionarynewFrom:String>>}{Class classSide. CollectionflatCollect:as:: Collectioncollect:1 SmallInteger bytesCountxHDReport runPackages:}SequenceableCollectionwriteStreamDo:5SequenceableCollection withIndexDo: CollectionoccurrencesOf:LI SmallIntegerevenIntegerhexzString capitalizedESequenceableCollection nextToLastSequenceableCollectionidentityIndexOf:ifAbsent:'ClassDescription isClassSide CollectionremoveAllFoundIn:Dateequals:;SequenceableCollectionninth2Number truncateTo: Bag includes:m CharacterisClosePunctuationpContexttallyInstructions:SequenceableCollectiondetectIndex:ifNone: Collection withIndexDo:+SequenceableCollectionpairsDo:ZSequenceableCollectioncollect:thenSelect:W HDTestReportrunSequenceableCollectionmergeSortFrom:to:by:String findSelector P DictionarynewFromKeys:andValues:aStringcharactersExactlyMatching:StringsurroundedBySingleQuotes'SequenceableCollectiondo:Boolean&LOrderedCollectioncapacity$BasicCommandLineHandlerhandleSubcommandBoolean==>3SequenceableCollection swap:with:f BlockClosure cull:cull: QBasicCommandLineHandleractivateSubCommand: CollectiongroupedBy:having:~SequenceableCollectionlastIndexOf:ifAbsent:FSymbolasTestSelector>SequenceableCollectionfindBinary:ifNone:=; CollectionasSetClassDescription instanceSide.SequenceableCollectionfifth2FloatarcTan:'wInteger slowFactorialIntegerprint:on:prefix:length:padded:= CollectionassociationsDo:/TrueifTrue:}"SequenceableCollectionsort: Collection asDictionaryzStringmatch:K Collection anySatisfy: Collection includesAll: Exceptionsignalȭ CharacterisLetterpPointmaxwmTrueasBit5 Collectionrange` Collection asByteArray  Collection asNewArray.Falseand:IntegerstoreStringHexzColor asHexStringj Collection copyWithout:y#PointisInsideRectangle:.Dateyyyymmdd CollectionprintOn:delimiter:last:Ł CharacterisDecimalDigitpSequenceableCollectionjoinUsing:last:!t TestAsserterassert:description:\Objectassert:PointminwmSequenceableCollectionreplaceAll:with: KeyboardKeynamed: Pointabs.Numberrounded}WColor fromString:EIString howManyMatch:JnOrderedCollectioncollect:OrderedCollection growAtFirst Collectiondetect:ifFound:WSequenceableCollectionpaddedWith:do:d CollectionasStringOn:delimiter:last:ŁSequenceableCollection reverseDo:GgSTON fromStream:n Collectionselect:thenCollect: Collectionunion: Collection difference: AsciiCharset toUppercase:؜StringsqueezeOutNumber Characterjoin:sTSequenceableCollection detectIndex:SequenceableCollectionidentityIndexOf:m|ArrayedCollection with:withAll:`SequenceableCollectionreplaceFrom:to:with: Collection-!Numbersecond. CollectionaddAll:SequenceableCollection runningMin:Number\\BagcumulativeCountsSequenceableCollection atAll:put:F TestAsserterassert:description:resumable: Character isSeparator5SequenceableCollectionindexOfAnyOf:startingAt:6RSYMarkerDecorationmax RBMethodNodepharoDocCommentNodesbPoint translateBy:~Point isFloatPointT SmallIntegerprintStringBase:[DateddmmyyyyzArrayatWrap:2]Point+-SequenceableCollectiondo:separatedBy:SequenceableCollectionatLast:fSequenceableCollection findBinary:nSequenceableCollection from:to:do:4SymbolkeywordsStrictõSequenceableCollection atWrap:put:!{Truenot  Collectionsorted:sTTestExecutionEnvironmentrunTestCaseUnderWatchdog:Point asFloatPointx DateAndTimesecondF CollectionremoveAllSuchThat:. Magnitudemin:max:~SequenceableCollectioncloseTo:r"FalseifFalse:ifTrue:}"PointscaleBy:vSequenceableCollection readStreamDo:5OrderedCollection add:before:rCurrentExecutionEnvironment runTestCase: CollectionasOrderedDictionaryzNumber milliSecond. CollectionincludesSubstringAnywhere:BagsizeA GeneratoronDo:y#StringwithoutQuotingS BlockClosuremicrosecondsToRunРStringcopyReplaceTokens:with:ZFalseifFalse:}"SequenceableCollection allPairsDo:{ClassDescription classSide. ByteArray booleanAt:"BagoccurrencesOf:/CurrentExecutionEnvironment runTestsBy: KeyboardKeyfromCharacter:ifNone:Setcollect:] CharacterisCurrencySymbolpSequenceableCollectioneighth2False&Point<Ҫ CollectionunzipTrue|Objectsplit: Collection removeAll: CharacterisAlphaNumeric?SequenceableCollectionfirst:x ProtoObjectifNil:ifNotNil:ҹFLGlobalClassClustervSlotAnnouncementsTestPackageRenameTestMCOrganizationTestRBPullUpMethodTransformation.RBCreateLazyAccessorsForVariableTransformationRBMoveMethodToClassRefactoringSpDrawStyleTest SpVerticalPanedLayoutAdapterTest!SpTreeTableAdapterMultiColumnTestRSHistogramPlotTest RSCameraTestClassAnnotationTestCDVariableClassParserTestPharoDocCommentTestAndreasSystemProfilerTestTraitWithComplexSlotsTestTFUFFIFunctionCallTestShMetaclassChangeDetectorTestFFICalloutMethodBuilderTestTKTWorkerPoolTestBoolean"TutorialPlayerTutorialAccessorTest PointTestEpHasImpactFilterTestArgumentNamesTestPharoDocCommentExpressionZnBufferedWriteStreamTestOCEnvironmentScopeTestOCSourceCode2BytecodeTestZipExtensionTestAsciiCharsetTest(DelayMutexSchedulerMillisecondTickerTest CharacterTestIdentitySetTestSharedQueueTestTestExecutionEnvironment SmallIntegerMicInlineParserTestMicArgumentsSplitterTestStFinderPackageTestScopesManagerTestStResetWindowPresenterTest NSSymLogScale GEllipseTest&CoHierarchyInstanceVariableFetcherTest RGMethodTestSycRefactoringStoreOnTest+ReInstanceSidePrintOnMethodProtocolRuleTestSMTPClientTestRBRemoveClassTransformationTest%RBRemoveClassVariableParametrizedTestRBPullUpMethodParametrizedTest&RBAddTemporaryVariableParametrizedTestEFVariableExpressionTest LazySlotTestPoint CharacterSlotClassVariableTestPackageTagTest MCPackageTestRBPushDownMethodTransformation$RBProtectInstanceVariableRefactoring"RBMoveMethodToClassSideRefactoringSpFontStyleTestSpScrollableLayoutAdapterTest0SpTreeTableAdapterSingleColumnMultiSelectionTestRSKernelDensityTest RSChannelTestQueryAnnotationsFromClassTestCDVariableWordClassParserTestMessageTallyTestTraitWithConflictsTest MOPTraitTestShSharedPoolChangeDetectorTestFFICalloutTest TKTWorkerTestRBLiteralArrayNodeDoubleWordArray"TutorialPlayerWithMockTutorialTestTextAnchorTestEpFileOutModificationsTestDebuggerModelTestPharoDocCommentNodeZnCRLFReadStreamTestOCIfNotNilTestZipWriteStreamTestCodeSimulationTest,DelaySemaphoreSchedulerMicrosecondTickerTestClassDescriptionTestPluggableSetTest ArrayTestMicMicrodownTextualBuilderTestMicColumnsBlockTestStFinderSelectorTest ScopesTestStOpenDirectoryPresenterTest GPolygonTestCoMethodVariablesFetcherTest RGObjectTest+ReInstanceSideSpeciesMethodProtocolRuleTestSocketAddressTest0RBRemoveDirectAccessToVariableTransformationTest)RBRemoveInstanceVariable2ParametrizedTest RBPushDownMethodParametrizedTest&RBAddVariableAccessorsParametrizedTest-RBTestAsDataForExtractSetupTransformationTestProcessLocalSlotTest SmallFloat64 PackageTest MCPatchTest RBPullUpClassVariableRefactoring7RBMoveVariableDefinitionToSmallestValidScopeRefactoringSpMergeStyleTestSpRadioButtonInteractionTest/SpTreeTableAdapterMultiColumnMultiSelectionTest RSKiviatTestRSCircleVennDiagramTest SpListAdapterSingleSelectionTestRegisteredClassAnnotationsTestCDWeakClassParserTestSpaceTallyTestTraitWithMethodsInProtocolsTest)TFUFFIBasicTypeMarshallingInCallbacksTest#ShSharedVariablesChangeDetectorTestFFICompilerPluginTestArgumentVariable RectangleFloat Exception MetaclassFTNullColumnSortingStrategyTest TextLineTestOSWindowAttributesTestZnCharacterEncoderTest&OCNewCompilerWithChangesFunctionalTest IRPrinterTestDirectoryEntryTestInstructionClientTest,DelaySemaphoreSchedulerMillisecondTickerTest FalseTestHeapTestProcessMonitorTestService MicParserTestStOpenFilePresenterTest GMatrixTestCoNarrowHistoryFetcherTest RGPackageTestCmUICommandTest)ReInstanceSideValueMethodProtocolRuleTestTCPSocketEchoTestRBRemoveMethodRefactoringTest RBRenameVariableParametrizedTestRBRealizeClassParametrizedTest#|aF+؄iN3qV; y^C( ՁfK0݉nS8v[@% ~cH-چkP5sX="{`E*׃hM2ߋpU:x]B' ԀeJ/܈mR7uZ?$ }bG,مjO4rW{'d:#s\oEXkATFLHookPrimitiveClusterFLHookPrimitiveCluster)ySortFunctions-Core$testSpecialLiteralsNotInLiteralFrame#testStandardTraitWithMultipleTraitstestIsExternaltestCompileFromTexttestComparisonWithItselfSUnit-Visitor-Tests,testClassifyUnderExtensionFromTheSamePackagetestOverlaysAreBeforeMainChild testSendTotestNestedStructureWithArray*testBlockWithArgAndEnclosedBlockSourceNodetestRemoveInteractionIfPresenttestIfNotNilIfNil1ArgAsVar testInBoundstestCreateEphemeronClassNamedtestReadOnlyErrorstestAdapterExistsNewTools-DebugPointsBrowser0testPlaygroundJumpOnIfTrueIfFalseAfterCompletion testDecorate ZeroDividetestHorizontalBlocktestDoubleEndingmetaLevelForHierarchyOf:testWindowLabellingxor:testUnclosedRaw=testExplicitRequirementMethodsShouldBeImplementedInTheirUsers raisedTo:testAddInstVarNametestComplexTrait stopIndexisCurrencySymbol:testBasicCoverageregisteredColorNamestestFromTempVariabletestBuildingGroupstestLoadSourceFilestestExtensionSelectorsNewTools-SettingsBrowser-TeststestResolvingConsistencyUnknowntestWhileTrueExecutesRightBlocktestDefaultOrganizer testAsStringtestTallyTreePrint.testBlockWithFourArgumentReturnsLastExpressionpiecesCutWhere:do:9testCanRemoveAReferencedClassNotHavingReferenceInTheModeltestBehaviorAddedtestAccessRealValuestestUnrestrictedClassVariable(testConvertingAsRestrictedByAnotherScopetestDoubleByteClasstestGetLowerLimittestSplitJoinStringOnStringCollections-Streams atAllPut: testComments5testClassDefinitionToolIsNotValidWhenNotAClassContext7testReshapeClassPropagatesToDeepHierarchyClassInterfacetestRuletestOneSpaceInsideArray Tool-DiffProfStef-TeststestJumpOnBlockVariablestestReadStreamIfAbsenttestNotSpawingNewParagraph testFlattened testBitOr$testUnregisterMCPackageKeepsRPackage#testGetEntriesFromRectangleInParenttestExtractAllKinds(testPriorEntriesFromNullReferenceIsEmptytestLasttestTranslateMiddleRightTo-NewTools-DocumentBrowser-GitHubResource-TeststestSendMessagetestLoadTwoObjectstestCartesianProductDo3ElementstestMutateObjectClasstestCallWithSelftestComputeVerticesSingleLine2testBlockWithASuperSendHasCorrectNumberOfArguments testSetUptestSuppressInformstoreOn:base:length:padded:$testReadInGivenContextShouldIgnoreIt testColorFrom testPeekLasttestWidenOnMultipleExpressions grad:x:y:z: h:s:l:alpha:)testFalseIfFalseIfTrueEvaluatesFalseBlock*test0FixtureOccurrencesForMultiplinessTesttestServiceRunsAfterStart/testUnselectPresenterItemUnselectsIndexInWidgettestByteArrayLongtest06addAfter1testResolveConstantIntegerShouldSetConstantLoader testFirstBCOffsetWithQuickReturn testAccessingTempsVectorInBlock2+testInitialPackagesAreInitialPluginPackagestestSixtyFourBitRegisterOrPropertySortFunctiontestCompileTemps isTestPackage%testDeleteAWindowAndTaskBarActualized6testChangingSlotCallsInitializeSlotOnInstanceMigrationtestReadsFieldtestMarshallingOOPIsSameObjecttestAssignTemporaryVariableTool-Finder-UItestAssignment1testLinesOfCodeSingleLineCommentWithoutWhitespace testIsNotRoot,testCompileMethodAnnounceAdditionOnlyInTraittestCanAlternateRowColorstestRadio3StartsDeselected"testModelReplaceMethodWithSameArgs'testRenameProtocolAsAnnounceNewProtocol2testIncludeOnlyInstancesWhichAreActiveForGivenUserSystem-OSEnvironmentstestFutureOnDoSucceedsOnSuccesstestCanConsumeLineBasic'NewTools-DocumentBrowser-GitHubResourcetestIncludesAnyAllThere$System-BasicCommandLineHandler-Tests prevIndextestFileOutSingleMethodRemovaltestIndexOfStartingAttestAllAtomicTypesCall-testExtractedCodeHasTwoExitPointExpectFailure7testFutureFailureCallbackExecutesInSameNewProcessRunnerAthens-Cairo-Tests'testLookingForStoreDiskReturnsDiskStoretestSpaceBetweenTemporariestestAccessesSlottestStepToMethodEntry!testRegisteredNumberOfPackageIsOk testStandardTraitWithSingleTraittestAbstractInstanceVariabletestDuplicatedInstanceVariable testBasic020Calypso-SystemQueries-Tests-P2WithSubclassFromP1testOverriddenMethodtestMouseMoveAfterDoubleClicktestIsWeakLayouttestUTF8EncoderRandom ProfStef-Core caseSensitive,testChangingASharedPoolUpdatesCorrectlyUserstestInlineMethod3testPullUpInAHighHierarchyClasstestIsAboveRow!testNotSelectsNotDeprecatedMethodtestAddVariableTransform;isDashPunctuationtestBehaviorNameChangemakeRoomAtFirst0testSimilarToAnnotationOfSameClassForSameContextAtestInsettingSmallerThanRectangleExtentShouldProduceCorrectExtenttestChangingDeleteSlottestBreakpointInitializationtestWithComplexRecursiontestRecompileUninstalled/testFailureExtractSetUpWhenIsNotFirstsSentencesSystem-SourcesCondensertestNormalSubclass previous:testUnwindFromForeignProcesstestNoNewLineBeforeCascadetestSwapAdjacenttestParsePharoZipTimestamptestLazyClassVarCompiled"testExampleTempNamedPutTempVector2;testCaseInsensitiveFilterIsNarrowWhenTheInternalAreNarrowedtestCompletionOnFirstLettertestNewSliderValueIsZerotestFailureMetaclassFailure!testPushTemporaryVariableBytecodetestDoesntContainPath!testRealActiveProcessFromProcesor#Calypso-SystemPlugins-SUnit-QueriestesttestIsEphemeronLayouttestTemporaryVariablesMethodctestChangeInInputSelectorWithToMuchAccessorThanArgumentsShouldChangePreviewLabelFinalWithFailedTexttestDetectInEmptyLog'testTruncatedToSizeLargerThanCollectionsameAs:testIsExecutedFromSingleScope test01addtestWriteWeakSlotCompiled?testPackageCommentToolIsValidWhenReferencingDifferentClassGrouptestFailureInvalidSelectorextensionPackagetestSelectThenDoOnEmptytestKeyAtValuetestExampleTwoBooleanSlotstestLongMultipleArgumentsaPointtestPragmaTwoParamtestBuildSimplePoint2lastElmcombinations:atATimeDo:"testCheckInputForInstallSubcommandSpec2-CommandsFtestWhenCurrentDirectoryChangeshouldNewFileDialogOpenOnTheNewDirectorytestPushTempArgument!testCopyReplaceAllWith1Occurrence'testReturnsAsManyWaitsAsSignalsReceivedtestReflectiveReadWritetestRemoveSlotRubric-testSettingLeftDoesNotProduceInvalidRectangletestBecomeForwardtestStructureOfPlainTexttestParseOptionsSystem-Localization?testCaseSensitiveFilterIsNotNarrowWhenTheInternalAreNotNarrowed(testBestNodeWithValidPlaygroundSimpleMsg5testEditClassScopeAddingClassAndCompletingFullPackage*testTraitDefinitionNodeIsTraitSequenceNodetrueAlternativeBlock3testComparisonOfTwoAnnotationsWithDifferentSelectortestCallbacksInOtherThread!BaselineOfNewToolsDocumentBrowser!testParagraphEnvironmentParagraphtestBasicQuoteBlocktestSegmentFromPointstestAddVisitedNodes isAllDigits$testwhenSelectionChangedDoFromEditor&testPackageOfClassMethodIsClassPackagetestIsWordLayoutstestFloatPrintPolicy testLinesOfCodeSingleLineCommenttestCommentWithoutImpactaFloattestResolvingConsistencyselectortestBuildCycleUntiltestCopyWithFirsttestAllExistingProtocolsFor%testAddBoxPlotAndLinePlotReturnsCharttestPositiveIntegerPrinting testAtRandomtestMarshallingFalseArgument firstNonDigit ReadStream2testBlockWithInstanceVariableReturnsLastExpression0testCopyForBehaviorDefinitionForClassDescription testPrimAtEndtestWindowsAbsolutePathName"testCanCreateHttpRepositoryFromUrltestAsStringOnDelimiterLastOne#testStringWithoutInitialCommentFromtestAnnotationtestClassSideOfATrait5testPrecedencesAreGeneratedInClassDefinitionWithAliastestWritingOverflowtestFullPrintOntestInjectIntotestNestedNodestestFindBinarylowBittestMillisecondsToGo%testRemoveElementReallyRemovesElementBaselineOfNewValueHoldertestNilIfNilEvaluatesBlocktestShiftMinusOne1LeftThenRighttestSelectThenCollecttestRedundantClassDefinition1testRemoveElementAddedAfterOpenRemovesFromAdapter!testJoinUsingLastOnArrayOfStrings.testClassDefinitionToolIsValidWhenClassContexttestIsEmptyLayouttestCompositionCopytestMetaclassNumberOfInstancestestAddTwiceReplacesChildtestNowhereToMove testInfinity1%testCompileClassifiedWithUnclassifiedtestAdditionInIfAbsentPut4testBestNodeWithInvalidPlaygroundIncompleteMidSource&testEditClassOrPackageScopeAddingClass'testBestNodeWithValidPostionOnMethodEnd(testTAddIfNotPresentWithElementAlreadyIntestExampleWhileWithTemp%testRedundantBehaviorRepackagedChangeRefactoring-Critics-TeststestDefaultResultTexttestScriptDebugPoint Epicea-Tests!testDoItRequestorReadRequestorVar%testTypedStringArgumentHasDefinedType Beacon-CoretestInspectionMeta7testNarrowFilterAfterFetchCompletionShouldNarrowResults,testLastBcOffsetForNodeWhenMappedPcsAreEmptytestDeleteAWindowtestWithBorderOpalCompiler-CoretestSearchPath1CoveragetestClosedTallytestNewForClass*testNewLessonHaveEmptyStringForTitleLessonIceberg-Plugin-Pharo growAtFirsttestModelInsertClass)testOptimizedBlockWriteInNestedBlockCase4testSpeciesLooseSortBlocktestAllEntriestestMorphicPopuptestDrawingWayOutside6-testClassAdditionWithInstanceVariablesChangedtestSignedInt64Collections-SupporttestStepThroughDoesTheSameThingAsStepOverWhenNoBlockIsInvolved+testModelExtractMethodWithTemporaryAssignedtestUnselectShapeWithShiftClickRing-Definitions-Core testUnloadWithAdditionalTracking"testTAddIfNotPresentWithNewElement testContextAttestSortedCountsEtestMethodsAddedInMetaclassPresentInSubclassesAfterChangingSuperclasstestTraceForDisabledHalttestItalicAPIToSetTexttestSequenceOfFormatsisBinary saturation3testUpdateMethodAnnounceRecategorizationOnlyInTrait!testNoUnusedInstanceVariablesLefttestResignalAs!testAddPoolDictionaryDependenciesSpecific-Rules-TeststestProtoObjecttestPrimNextPutMorphic-Widgets-TaskbartestWikipediaExample2testFailureEqualsVariablestestWithAxisLabeltestResizeMakesCanvasResize testBreakLink+testAddingExtensionMethodNotMatchingPackage ComponentMaxtestSimpleEnsureTestWithError4testConfigureContextWithHaltShouldMarkContextAsErrortestTransfersSingleClienttestFutureZipFailsIfSecondFails STON-CoretestReplacePresenter timesRepeat:1testCreationByCommaWithMultipleCompatipleContextstestCreateNormalClassNamed-testConflictingEncodingOptionShouldRaiseErrortestSequenceDetectsAtEndgtestWhenCustomizeFilterWithoutDefaultFilterShouldFilterDropListPresenterIncludeDefaultFilterAndSelectIttestPragmaDoesNotExist(testDefinedClassesInstanceAndMetaSideAPI"testSingleQuoteBlockFollowedByListPharoDocCommenttestDefaultFontprintOn:base:length:padded:testCachedMethodNodetestIsAListDash'testNotVisibleMorphIsNotGettingAnExtent$testSimulatedProcessIsInCorrectStatetestDoItRequestorOptimized=testInitializeFilterDropListSelectedItemShouldBeDefaultFilter!testAndWithLeftTrueEvaluatesRight)testBestNodeWithValidCascadeLastStatementtestSizeUnsignedIntEnumtestCreationFromBytes2testClassWithClassSideImpact'testFutureFlatCollectFailsOnSelfFailuretestLongStackSizetestIntoWorldDeleteOutOfWorldSystem-Platforms?testClassTraitThatHasAPragmaHasCorrectTraitSourceAfterRecompiletestAllNamedFromToSortedUsing testIsUsedtestWithCollectError testSetToEnd"testKeyAtExistantValueReturnsOkKeytestHex testImportAMethodWithNoTimestampKernel-ExtraUtilstestOneSpaceIndenttestUnsignedIntAI-Algorithms-Graph-Components7testChangeInSuperclassShouldNotAnnounceSubclassModifiedNewTools-CodeCritiques-TeststestNaN5testMixedSignDigitLogicDebugger-Oups-Tests9testHandlingWithSeveralExclusionsAndExceptionSetsHandlingtestRadio1StartsDeselectedtestStrictModeOptionOffMonticello-Model testFirst"testIsTerminatingForcedTermination testStrikeSystem-FileRegistrytestBuildMethod$testExampleToDoOutsideTempNotInlinedtestModelInlineRecursiveMethodtestFailureBadName$testStructureHasCorrectOffsets32bitstestIncludesKeyLocalyDefined#testForcedRuleOnClassWithPackageBantestRequestResponseCtestIsAbsoluteWindowsPathReturnsTrueWhenWindowsAbsolutePathProvidedtestRNG1testFailureCannotExtractProperSubtreeFromIntervalSystem-Object EventsLtestAddMethodInExtensionCategoryWithExactMatchAddMethodToTheExtendingPackagetestUpdateShortStackForDisplaytestInferiorWithIntegerOtestExplicitRequirementWithSuperclassImplementatiosAlwaysReturnsTheCorrectValuea1a1testPushThisContext padWithZeroestestChangingRootsUpdateWidgettestCreateValueHolderRefactoring-CriticstestHasPasswordSettestWorkingDirPrintString"testCanGetDaPackageFromAGivenClass"testAddNonEmptyGrowsWhenNewElementtestStepIntoQuickMethodEmergencyDebugger-Tests testNextPut/testPackageOfClassMethodFromTraitIsTraitPackage-testAllGlobalNamesStartingWithDoCaseSensitiveatAll:testInvalidPrimitivetestKind testGreen8testConflictingProtocols!testExampleSimpleBlockLocalNested testPrimNextNewTools-MethodBrowsersScriptingExtensionstestRemoveSharedPooltestInitializedSlotUpdateClasstestPackageIsUpdatedInClassSidetestLegacyPharoConfigurationtestIfExistsIfAbsent isSymbol:%testInsertClassWithinExistingHiearchy.testMutateObjectInstVarShouldCatchRightFailuretestNoRemoteReadNestedBlockstestSelectsDeprecatedMethod testMinMax%testSingleLevelListSplitWithEmptyLinetestInitializeWidgetstestIfNotNil0ArgtestOverrideStoredCredentialstestCompileFromAnalysedASTFuel-Core-TeststestAnnotationASTtestImportAClassCategorytestSharedVariablesAsArraytestRemoveShadowFromShape%testPassing2DoubleStructureInTheStacktestUntypedTrueArgumentIsTruetestOnlyWeakSubscriptionstestWaitForSendDoneAnswerStatus2testUnoptimisedPlusSpecialSendsMessageCapturesSend*testRestoredBrowserInstanceWithQueryScopes testNewLineBeforeAndAfterCascade)testCompileClassifiedWithProtocolInstance%aDictionaryOrCollectionOfAssociationsTool-ProfilerstestCommentBetweenStatementstestOptimizedBlockReadInBlocktestTwoClassWithSameNametestSingleRemoteMethodArgumenttestResolveTempPathFromTMPtestRemoveTagRemoveClassestestBreakpointOnClassVarReadsFreeType-MorphictestFips180Example1testSelectNonetestSelectAShapeShouldUnselect testMessagetestAllUnsentMessagesSettings-System!testOnceBreakpointDisableAfterHit new:withAll:testContextMenu testPagerwithIndexSelect:testAsNumberWithoutDecimalPoint2testCompilingExistingMethodDoesNotRemoveExtensionsDebugging-CoreZinc-Resource-Meta-TestsisCasedLetter:"testFindThisPackageAfterAddingTexttestNewTraitExlusiontestDigitLengthtestNestedLevel2testFloatCenterExtent*Calypso-SystemPlugins-Critic-Queries-Tests testIsNiltestOwningClasstestExampleTempNamedCopying2-testWorkerPoolCretesWorkersWhenExecutingATasktestModifyingSuperclass testLayouttestSetErrorMarginlastByteAtestFailureRaisesRBRefactoringErrorWhenRemovingNonEmptySuperclass testValuesDoNewValueHolder-CoreEmbeddedFreeType-Tests testClose.testTaskDoesNotTimeoutIfTaskExecutionIsShortertestSingleTraitadaptToPoint:andSend: testAsSetcollect:testNilIfNilReturnsBlockValuetestBackOnPosition1 padLengthaNumber nanoSecond5testDoubleClickShouldNotTriggerIfClickedOutsideBoundsexampleLiteralByteSymbol)testRemovedSelectorsWithMultipleSelectorsptestToolsToInstall2testUntypedConstantIntegerArgumentHasUndefinedTypetestKeywordOneArgumentPerLinetestMultipleChunks#testNilIfNotNilDoesNotEvaluateBlocktestNonConflictingArgumentNamestestOneLineMessagetestContentsSetSUnit-Support-UITesting6testAcceptTwoEntriesAtDifferentIndexLogsSeparateCountsmaxValtestCircumscribedCircle readWrite#testSelectionInFontStyleListIsKept2testPerformWithArgsLargeFrametestNameWithDelimiter!testServiceExecutesStartUpOnStart testEmptycetestPrintElementsOntestMicrodownImporttestCombineDependenciesKtestVariableWordClassWhenTraitCompositionChangedShouldAnnounceClassModified testGoodPathRemovingNonEmptyLeaftestCanPerformInSubclass testBounds,testSubscribeToChangeRaisesEventWithNewValuestep&testSubstringSearchNonExistingSelectortestClassWithCommenttestCheckIfAnnotatesGivenClasstestNotifyTempBreakpointHit0testAssociationAtExistantKeyReturnsOkAssociationtestIntegerPointerParameters$testInitialArgumentListAutoSelection-testUnaryMessageNotMatchingAnInstanceVariable4testNestedBlockWithExternalTempReturnsLastExpression findBinary:testWithDoErrorGZipWriteStream testInformzippedtestAnnounceWhenSelectionStarttestMcWorkingCopy'testWhileTrueExecutesRightBlockWithTemp0testFutureOnDoSucceedsOnTrappingCorrectException testWithPrecedenceIsNonAConflicttestIsAllWhitetestBreakOnceInContextSystem-Caching-Tests NewTools-Sindarin-Commands-TeststestCelltestChangeLayoutTypeToByte$testIsTerminatedAfterSelfTerminationtestNoneSatisfyEmptytestIfNotEmptyifEmpty testNumber testsRsValuetestInstanceVariablesStringtestNoSpaceAroundBracketstestTooLongArgument(testPackageSelectionAfterPackageCreationtest8BitDisplayMetacello-TestsReference sum:ifEmpty:ifNotNil:ifNil:!testBreakDebugPointOnVariableReadtestUnregisterPackagetestAll,test0FixtureAsSetForIdentityMultiplinessTest testOutliers toUppercase:SUnit-MockObjects-TeststestRawsWithBoldtestRemoveZerotestJustSendsSuperFailingtestTargetedToolsWhenOneContext testDelaytestIfEmptyifNotEmptytestCreationByCommaisCurrencySymbol6testBestNodeForClassNameSelectionShouldBeClassNameNode testAlias testFloortestRawsWithItalictestBanForPackagebase testMaxSizetestBuilderSharedPoolstestZeroElementRectangledicttestEachSelectorReturnsALesson testPrintHalttestByteArrayBaseNewTools-Scopes(testManifestNamesAccordingToPackageNames*testSixtyFourBitRegisterLeftRotateBySimple testExtension0testSixtyFourBitRegisterLoadFromReverseByteOrdertestStepIntoQuickMethods testIsEmptytestItalicNestedInBoldtestGrandchildOfReferencetestPointerCannotExtendByte testRemoveInstVarNamedWithTrait2.testInferVariablesWithNoInitializeFindsNoTypes/testIteratorWithInfiniteBlockOnlyCallFirstTimeserrorNotFound:)Calypso-SystemQueries-Tests-PExtendedByP1 dictionaryRubric-SpecFindReplaceDialogtestNoNewLineAfterCascade2testMathBlockOnMulitpleLinesto:!testSizeWithGarbageCollectedValuetestNthRootExactnesstestJoinStringUsingChartestBreakpointOnTempReadsaSortBlockOrNiltestSplitArrayOnElementtestExampleIfFalsetestDefaultPlotColorsIceberg-Libgit-ToneltestServiceIsKilledAfterStoptestUTF8EncoderIncompletetestCanUnzipFromStreamtestReturnHasNoPeriod'testComparisonOfTwoDifferentAnnotationsupToEndtestStoreSettingNodeTwicetestColorsOutIntestDefinedBehaviorsCollectionaltestExtractSetupExample2testProperTestProtocolIsUsedtestOverlappingFormattestFindLastNotIntestPushDownUnusedClassVariabletestClassVariablesStringtestConvertFromIntegerWithScalesidetestDeleteAllChildren testCircletestBuilderTraitstestLinesOfCodeSimpleCasetestRecompiledReturntestAddingPackagetestSearchForPatternCode2testSpecialGestureOnOuterMorphPutsHaloInOuterMorph$testClassifyUnderAnnounceNewProtocoltestSortedElementstestRaisedToIntegerWithFloatstestVariableDoesNotExisttestBoundingBoxOfSubmorphstestTagsForMethodstestLinkCreatesInnerTexttestRestoreWindow testToLongNewLineWithSpaceBeforefoo:!testIntersectionsWithVerticalLineBaselineOfFreeTypetestConnections01compiledMethod1testFutureFirstCompleteOfFailsIfSecondFailsFastertestTwoSingleParagraphstestBinaryMessagetestCustomFocusOrder#testKeyAtValueIfAbsentLocalyDefinedNewTools-InspectortestIncompatibleBehavior&testNotWrittenInMethodWhenItIsOnlyRead3testBehaviorClassClassDescriptionMetaclassHierarchytestUTF8EncodertestBantestCompileValuetestSizeSignedShort testPairsDotestHeadCompressedZerosToBytes;testRenameClassUpdateOrganizerClassExtendingPackagesMappingtestCopyUpToLasttestAtAtIfAbsentPuttestExecuteSortingOntestMathInlinetestARectangleContainsItsOrigin&testMonitorAnnouncesUpdateWhenDisabledtestNoEmptyProtocolstestUTF32EncoderExampleFromD101testParseFailuretestRepeatedMergetestHumanReadableByteSizeStringtestRemoveOneOfThreetestSplitArrayOnSequencetestWithoutPreTabs testCallgraphtestPathStringtestPushInstanceVariable%testOnForkErrorTakesLessThanOneSecondtestCyclesWithAtLeast testInstallInSpecificEnvironmenttestSimulateClicktest4ViolinsAnd2ClustersMonticelloTonel-Tests-MockstestRelativeWithParentstestLoadNotFoundMicrodownSystem-CommandLine-TextSupportfactortestLineAtCursorPositiontestPrintRelativeWithParent)testDictionaryPublicProtocolCompatibilityTools-CodeNavigation-TeststestBasicStream`testChangeInInputSelectorWithFewAccessorThanArgumentsShouldChangePreviewLabelFinalWithFailedText$testAddingSlotDoesNotRemoveExtensiontestDeleteAllHistorytestParseLineWithTwoCharacters5testMergingTwoStylesWithASameClassHasClassInBothSidestestPragmaNoExtraSpacetestMethodDefinitionWithBangstestBoldItalicAPIToAccessText$testShouldAcceptIntegerWithoutMinMaxtestRemoveAllFoundIntestModelAddMethodcopyWithoutDuplicates testWithRB10Equalsstrm+testSettingTextManuallyClearsTheUndoManager3testNonDefaultSettingValueIsIncludedInTheStoredFileisBytestestConcatenationSearch8testNotAffectedByChangeOfAbstractMethodOfNotRelatedClass"testStepRestartAndRestepTopContexttestMonospaceWrappedElementsBaselineOfAthenstestLabeled03HasModel lastValuetestPasswordIsSetInWidget/testEmbeddedAnchorInTextAreDrawnAtRightPositiontestRemoveTraittestAcceptEntryLogsAllSources3testNormalProcessCompletionWithLeftEffectiveProcesstestEncodeCRLF)testFalseIfTrueIfFalseEvaluatesFalseBlocktestRenameProtocolAsWithNil22testClassCommentToolIsNotValidWhenNotAClassContext BaselineOfQAtestIsFixedLayoutbitAnd:)testRegisterPackageTagConflictWithPackage2testSetColumnTitleInPresenterPutsColumnHeaderMorphtestWriteCompilationvalue:+testOnlyOneMethodInMicrodownDefinesSettingstestDefaultEnvironmentContent#testExtensionsAreNotDoneToCodeBlock*testNextManyAfterLimitShouldStopAfterLimitRoassal-Mondrian testWithWeirdValuesLineWithTickstestNegatedSearchtestMustInclude02 testGroups toJsonString:testStorePopIntoVariableRubric-StylingtestExtractSetupExample7testRemovingExtensionProtocol badSemantic testNewFrom*testSupplySeveralAnswersToSeveralQuestionstestLiteralEqualitytestCompileClassifiedWithNiltestOriginSelectorOf testAsNumber#testTerminationDuringNestedUnwindR1'testMultiplicationDoesNotLoosePrecision+testImportAClassCommentWithExclamationMarkstestDebugSession!testDoubleArraysHaveCorrectLayouttestUpdateDisplaySUnit-Rules-Tests testReadNodes-testSimpleTableWithFormattingWithSomeElementstestProtocolAdditiontestAddElementAddsToAdapter testRadiusabstestConflictMethodCreationtestSignedShorttestLiketestHasShortcutKeytestPushLiteralVariableBytecode&testPluginBasedJpegWriteReadUsingFilestestPrimLessOrEqual testRemoveOnetestCommentSourcePointerVtestSkipAssignmentWithStoreIntoBytecodePushesReplacementValueButNotWithPopIntoBytecodetestHasVersiontestHandlesContext testOpenLogtestIsRelativetestExecutionCriticalSectiontestDirectTraitSubclassingtestCreateNormalClassWithIV testSameRangetestBoldsAndNestedItalicstestCanRemoveUnreferencedClasstestClassWithPluginEnabledtestInlineMethodtestHashingPeppertestDefinitionOfTraitVariablesLibrary-TeststestReturnTrueBytecode!testFourBackQuotesOnMultipleLinestest2BitDisplaytestAnnotationNoArgs testExample1 testInclusion#testTraitUsersAfterMetaclassReshapeRoassal-UML-TeststestCopyFromToWithForSorted2testFalseIfFalseEvaluatesBlockWithTempOutsideBlockcoltestUpdateShapetestEnumerationtestComparisonOfSameQueriestestClassifyUndertest32BitDisplaytestWaitMaxMilliseconds)testEqualSignOfIdenticalCollectionObjects findFirst:.testFixedLocatorDataIsOkWithUnsortedCollectiontestNextPutAllStartingAt%testCopyNonEmptyWithoutAllNotIncludedtestMoveMethodIntoArgumentdetect:ifFound:testAddTraitSettingPackageTagtestVennDiagramOneSettestMakeRelativedo: testWithRB9testReturnHasSpaceBetweentestStandardTraittestRemoveFromSystem.testClassDefFromLegacyStringHasPackageNameNodeBaselineOfTaskIt!testFindThisMethodAfterAddingTexttestByteArrayConversionErrorstestSelectingInEditortestAsFormWithExtenttestGroupsOfAtATimeCollect!testUndefinedExtensionIsCodeblock,testLocalProcessTaskRunnerRunsInLocalProcess test0FixtureCopySameContentsTest!testSmartCharacterPairForIfAbsenttestParseError!testOrWithLeftFalseEvaluatesRighttestCustomLineBreaking Character.testEnvironmentWithCorrespondingClassIsCreated$testUndeclareSlotFixWhenSlotIsLoadedtestJpegWriteReadInMemoryallRangesOfSubstring:testSigned2ByteIntegerstestLargeCharacterStreamtestInitializeInRoassal testBecometestSelectingAnElementSelectsIt testSixtyFourBitRegisterAddition testUnzipTotestLiteralString"testTrueAndAnythingReturnsAnything testFailureVariableAlreadyExiststestPrintOnDelimiterLasttestValidateRenameParameterstestForeignMethodModifiedtestFillInTheBlanktestDotProduct testLinesDoHtestRemoveProtocolIfEmptyWithNonExistingProtocolDoesNotAnnounceAnything2 testFailureNotUnderstandSelector-testShouldWarnWhenRemovingClassWithReferences!testGetQuartilesOfEvenDatasetSizejoin:)testAddProtocolWithProtocolFromOtherClass testContents testDoDuptestOpeningOnPackage,testLayoutWithChildAndOverlayHasBothElementscompare:with:collated:testForSecondsNewTools-ProfilerUItestDependenciestestWeakSlotIsWeak.testMouseMoveWithoutDraggingDoesNotModifyValuetestSimpleCreate2testFailurePushDownMethodSubclassesReferToSelectortestNotifyDebugPointRemoved!testWorkerRunsAlwaysInSameProcesstestRemoveProtocolAnnouncementkwd"testUsingMethodsFindsVariableUserstestInsetRectangle testNewSlottestDefinitionOfTraitedClass9testBestNodeWithInvalidMethodIncompleteMidSourceOnMessagetestModelAbstractClassVariable System-Sound testRemoveKey testLayoutSetmergeSortFrom:to:src:dst:by: testWhenSuperclassIsAnnotatedTootestwhenTextStylerChangedDoprintStringBase:testSelectableIndexBellowtestPropertyAtPut storeOn:base: testExampleSimpleBlockLocalWhiletestObjectCentricObjectAPItestExtractSetupExample6testConvertingToNewMetaLevel@testWordsAwareIteratorFiltersByASequenceOfCamelCaseWithUppercase0testCreateAndChangeWithoutCommentDoesNotAnnounceRenraku.testTrueIfTrueEvaluateBlockWithTempInsideBlock testHasIcontestReadStreamDotestAddingHaltToMethodtestExampleSuper+testInlineMethodWithMultipleSendersInMethod asHexStringtestSortingChainedtestPutNegativetestDoEvaluateDeclareGlobal!testAddInstVarNamedClassInterface0testInvalidNameFollowedByAValidNameExpectSuccesstestBmpWriteReadUsingFiles!testFailureBadInitializationCode1 associationsmatch:testPurePathInterpretedAsFileRoassal-Sunburstdetect:ifNone:testDrawingWayOutsidetestMutateWideStringUsingAtPut&testAllGlobalBindingAreGlobalVariables aByteStringtestToDoInsideTemptestTentestCompatibility#test0FixtureIncludeWithIdentityTesttestResumablePasstestExampleSimpleBlockLocalIftestWithCollecttestStylerSpineRedtestAllBreakpointsForModeltestExternalLinkWithBoldtestIsRootInEnvironmenttestNothingToCovercompare:testNestedLoopsExample1storeOn:testMoveClassToTagInNewPackagetestEnabledAffectWidgettestCommonSuperclassWithtestUnwindFromActiveProcessidentityIndexOf:ifAbsent:testIsOfflineFalsenew:(testImportAMethodWithSpacesInItsCategory>/testSpotterModelShouldWaitToPerformActualSearch%testCodeBlockCaptionContainsMonospace testPrimAddtestExampleiVartestClassWithNilSuperclasstestFormatCommentWithStatementtestChangeInMetaclassIsDetected testVmBinary+testSelectWhenSortedTransmitsCorrectElement,testWindowShouldBeSaveBeforeShutDownSaveRoottestBreakpointNodePropertyBagtestSelectedTabsAreNotBuild$testStructureHasCorrectOffsets64bitstestAddSlotAndMigratetestBuildArrayHeuristic!testWhichSelectorsAccessFindSlotstestRemoveClassWithBreakpointtestReversedIsOrdered"testFailurePushDownNonExistantMenuoddAtestAddParameterThatReferencesABlockWithInstanceVariableReferencetestUnclosedAnnotation"testMethodPackageFromObsoleteClasstestDoWithoutNoDuplicatestestNotifyArgumentBreakpointHit"testReplaceTokenWithAditionalSpaceStestChangingPcToNonExistingBytecodeOffsetGoesToPreviousPcWithExistingBytecodeOffsettestUnionAccess Tool-FileList testTraditionalBinaryPrecedence2 testLength testEquals3testFailureEmptyPackagespan'testDontRetainBlankLinesBeforeComments2testUsingXAndYtestOnLimitLimitBlocktestDefaultKeyboardFocus placesDesired>testWorkerInstancesAreCollectedAfterStartingAndStoppingService&testStoredValueForSettingNoStoredValuetestFromDetect*testBlockParameterWhenTheLineWillBeTooLongtestStepThroughUntilTerminationZinc-Character-Encoding-TeststestIntegerReadsNotOkFromStream testCycle5testSettingEnvValueDuringRevertsValueAfterDuringBlock testThetatestCompileArray,test0FixtureTConvertAsSetForMultiplinessTesttestStandardClassWithPackagetestHasCommandwithSeparatorsCompacted-testSelectedRowIndextestExampleSimpleBlockArgument1'testEscapeCharacterWithNoCharacterAftertestChildFilestestTwoCommentBlocktestParseFunctionNoArgumentsBaselineOfManifest whileFalse:(testClassIsDisplayedWithCorrectAlignmenttestMultiRequirementOrderingtestSimulateKeystroketestAsPackageWithErrortestIsSurrogateOthertestShouldGetDirectDependenciestestTwoConstsInSameMethodtestAtPutExactSizeNumber testWithRB76testCallbackInSingleFunctionUsingSubclassOfFFICallback testAsPoint Reflectivity testWithTop<=#testClassAdditionWithCommentChangedtestPushTempTemptestExtentIsCorrecttestCommandOrGroupNamedArithmeticErrortestInstallFromFile testOrderRing-TraitsSupporttestMethodsEnumerationAtestClassCreationToolIsNotValidWhenNotAPackageOrClassGroupContext Zodiac-ExtratestCompleteSuper/testChangeInInstanceVariableRaisesEventOnlyOnceadd:withOccurrences:testIdentityIncludesNative-Browser atWrap:put:testIncludesClass testTesting testClearFlagtestBackWindowsAreShowntestAsDictionarytestOtherNewFromtestReverseLinksDo1testExtractToTemporaryWithDuplicatesInOtherScopestestSuperSendstestPrintOnDelimiter!testThirtyTwoBitRegisterInversion8testAcceptEntryIncrementsAverageEvenIfAtDifferentIndexes(testCreateClassWithPropertySlotAddSecondtestKeywordOnMultipleLine15testReadAllLargerBuffertestExamplePrimitiveErrorModulelisttestStoreBase16testAtAllIndexesPutifTokens,testNewBreakpointForVariableInClassForMethodtestPrimitiveNumber/testStepContextNonTakenConditionalJumpBytecodestestThreeSpacesBeforePeriodtestParseBogusFormCanvas-Tests6testClassAdditionWithMetaclassInstanceVariablesChangedtestShouldAcceptFloattestCorrectlyCreateDebugSessiontestAddClassSlottestDeclareTempAndPastetestChainBehaviorPutChildRefactoring-UI-Tests'testCompareWithIfLesserIfEqualIfGreater testSideOftestSkiptestRelativeFileRecognized%testFailureModelBadInitializationCode Rubric-TeststestSetNameTexttestAddClassSettingPackageTagtestHasMethodssplitOn:indicesDo:testRelativePrintStringLocale testPropertytestAssociations$testTraitWithComplexSlotUpdatedAfter$testAtPutBiggerNumberThrowsExceptiontest08addAftertestEvalSimpleMethodWithErrortestClosureRestart Roassal-DSMtestLiteralReturnsLiteral testMerge5 newDictionarytestUsingConstJustInSameMethodtestReplaceMethodInAllClassesdoBlock/testProtocolsForAllMethodsForClassWithoutTraitsrepeat:*testBoxPlotCreatedWithCollectionOfDatasetstest0FixtureCloneTesttestBlockWithTempsSourceNodetestName+testPackageTagRemovalWithPackageTagAddition testCoverage'testFutureSelectFailsOnFailingPredicate testAddTagtestAddNewProtocolDoesNothing testCullCullresettestCulltestStepIntoAssignmentLtestMoveToNodeKeepsStackWhenAimedNodeIsMethodNodeThatDoesNotHaveAssociatedPCtestEditClassOrPackageScopeRemovingClassAndBreakingFullPackagetokentestFailureMethodWithoutCascadetestIsInstanceSidetestSharedPoolFormCanvas-CoreDurationCollectionIsEmptyCursorRoassal-Inspector-TeststestTallyTreePrintWithTabtestAlignmentMorphClasstestExampleNewArraytestCloseEmergencySession+testSkipCanSkipReturnIfItIsNotTheLastReturntestNextIntegerBetweenAndtestVisibilityWithBlock FileSystemtestCustomSearchBlocktestSizeUnsignedInt64remove:ifAbsent:testIsPrivateAddress$testClickDoesNotAccumulatesSelectionu Kernel-Traits)Calypso-SystemQueries-Tests-PExtendedByP5testSizeDoubletestPrintPaddedWith testLoad2 testAddPoolItestAsFileLocatorOrReferenceReturnsALocatorWhenStringRefersToAKnownOriginGraphics-ShapestestFips180Example3withoutPrefix:testClassWithUnknownSlotstestRaisedTo02&testBuildVariableTempVariableHeuristic*testDependenciesWithoutExtensionDependencytestCreatingMethodInSubclass testFactorial:testActivatedCheckboxPresenterStartsActivatedCheckboxMorphtestExtractDatasetFromBlock+testBehaviorDefinitionModifiedForSuperclass testRaisedTotestHorizontalBar truncatedtestCopySameClasstestCreationNodeBased-testConvertingToReducedScopeByExtraClassScope!Calypso-SystemPlugins-FFI-QueriestestCompletion test13removetestVersionsForMethodtestClassWithSlotstestFailureInvalidNewClassNametestRehashPreservesElementstestSumUnsignedInt32copy4testMakeClassAbstractAddsIsAbstractMethodToClassSidetestPrimeFactors testMerge2testInclusion2testSimplePasstestKeywordOnMultipleLine8storeStringBase:*Calypso-SystemPlugins-Reflectivity-QueriestestTypedStringArgumentIsString Athens-CoretestDefinedMethods+testExtraneousStatementAfterAReturnInABlockOmStoreFactory*testFallbackReplaceFromToWithForWideString"testHeatmapContainsAGradientLegendtestKeywordNoExtraSpacesBeforetestUnsignedSumLongLong3testMoveToNodeWhenFromNonInlinedBlockToOuterContext testSelector valToPowertestSimulateMiddleClicktestIsPossibleToSetSlotInBlocktestAddClassPatternUnix64.ifTrue:unzippedtestFailureExistingClassNameBaselineOfAIGraphAlgorithmstestSimulateKeystrokesManifest-Resources-TeststestContinuationExample2testRepeatExecutesBlock testWithEdge indexArraytestVariableClassWithTraitCreatedShouldntAnnounceClassModifiedbb: Clipboard"Tool-DependencyAnalyser-Tests-Data testCaptiontestDisableCheckChildrenActionstestDescriptionTexttestKDESetBandwidth testEdges rectanglesrename:to:in:selector:testUnequalContenttestEncodeSoftLinebreak testInstVarCodeImportCommandLineHandlers testCompileallButFirstDo:testDrawingWayOutside5)testReadIntoStartingAtCountFromStreamWide testCPath(testTooLargeAnIntegerInALiteralByteArray testPassingNestedStructByCopyInC(testLastFilesForExtensionNegativeTestingrelativeToReference:FtestIsAbsoluteWindowsPathReturnsFalseWhenNoWindowsAbsolutePathProvidedtestBlockTemps testSimpletestNewLineBeforeFirstKeyword testFindFirstprintOn:testRBPatternVariableNodetestReadWriteCompiledtestVariableLayout/testInjectingExceptionHandlerIntoRunningProcess8testIteratorOnACollectionWithCollectReturnsCorrectValuestestStandardMethodtestIsFinalQuotetestSendsSelectortestRenameInstVar testBooleanstestMethodAdditiontestAddMovieDirectortestAreatranslateToLowercasetestDoesNotUnderstandAccessors testHeighty#testCapacityFromAsOrderedCollection ColorPicker)testAtGarbageCollectedValueRaisesNotFound$testInstanceCreationMajorMinorSuffixasSortedCollection:testExtentWithBorderFileSystem-CoretestNewSliderIsNotDragging testXdgParseUserDirLineDocuments testIfCutDoWithCutAndUncutsFirst testBitAndEndianDetectortestMethodsContainNoHaltPtestWhenClickAnAfterHistoryButtonIfThereAreHistoryShouldComeBackTheGoodDirectorytestFindPNGPreviewerTranscript-CoretestCloseToWithPrecisionthird!testPrintSeparatedByEverySignedOntestReflectiveReadWriteBlocktestDecodePlusAsSpaceBaselineOfSlot testSuperSendSmalltalkImagetestRawstestPackagesDiffToDisplay(testMutateObjectInstVarUsingInstVarAtPuteach+testWithRightDoesNotProduceInvalidRectangleSystem-Settings-Core-testFailureBadIntervalAndVariableDoesNotExistMorphic-Widgets-Taskbar-TeststestOneMBAllocationtestIndexOfStartingAtDuplicate3testCaretInTheEndOfSecondWordHasSecondWordUpToCarettestFilterExtensions3testWordsAwareIteratorFiltersByASequenceOfCamelCasetestNodeCoverage2QtestAsFileLocatorOrReferenceReturnsAReferenceWhenStringDoesNotReferToAKnownOrigintestCreatingMethodInSubclass2testClustersMargin(testLogLocatorDataIsOkWithReversedDomaintestDoubleBarPlotRawDatatestChildOfReferenceprintOn:format:(testHasNonDefaultValue_DefaultOverridden testIsHealthy testDurationtestPngDecodingColors32testIfNotNilIfNil1ArgBtestTempAssignmentAndReferenceAfterExtractedCodeExpectGotExtracted testMethodModificationOfProtocoltestCollapseAll$testRightClickShouldNotExecuteAction NumericNoisetestPrintingBold2 testTransfers testGroup!testPackageNamedWithDifferentCasetestOneArgumenttestTranscriptDebugPointtestAtPathIfAbsent7testSelectPresenterWithScrollingMakeSelectedItemVisibletestSplitBlockLinkInlineImagetestUninstallCountertestBehaviorCommentChange testSubstituteVariableAtIntervaltestDifferencePreservesOrder*testRemoveClassesWithReferencesBetweenThemtestMakeReslolvedtestAndtestLocalProcessTaskRunnerExceptionIsHandledByExceptionHandler testPushReceiverVariableBytecodetestDefaultLayouttestAbsoluteWithParentsexponent testAccessorInstanceVariableSlottestBehaviorWithProtocolstestNewLayouts#testCleanUnusedUnreferencedPackagesCodeImport-TraitstestAllButFirst testBlack32"testCurlyBraceDoesNotLeadToProblem testNoTriggererrorKeyNotFound:testKeywordOnMultipleLine12testExtractSetupExample5testCanConsumeLinetestCollectAsWithParenthesistestCommentStamptestHorizontalAttachPoint testLabeledtestIfFalseIfTrue_:testHasMagicNumbertestInlineMethod1 LogicalFont testBinSizetestExpressionRuntimeErrortestMoveClassToTagNametestMergingOverlappingRects%testNoNilAssignmentInInitializeMethodtestAddClassSettingPackage2test0FixtureDictionaryKeysValuesAssociationsAccessindexOfAnyOf:startingAt:testCreateNormalClassWithTrait1testNewScopeFromASinglePackageAndSomeOfItsClassesasBitseconds:testRenameMethodPermuteArgstestWhenClassHasNoAnnotations2testUntypedConstantIntegerArgumentHasConstantValue%testListWithoutColumnsHasSingleColumntestBinaryMessageComments.testSearchForExactCaseInsensitiveStringMissingtestIsHiddenWithRealFilesystemtestSpaceBetweenTemporaries2*testPNGPreviewerCanBeUsedOnParameterStringtestCannotLoadtestSizeReturnsThree testSave2testWidenOnComments testIsZerotestJoinArrayUsingStringtestStepOverAssignmenttestAllConnectedShapestestHasLabelFalseRoassal-AnimationSystem-Identification-TestsTranscript-NonInteractive#testOptimizedBlocksAndSameNameTempstestDeclareClassVarexpandMacrosWith:with:with:Calypso-SystemTools-FullBrowser=testMergeWithFontDoNotRemovePredefinedFontWhenNoFontIsDefinedtestIsFormatOthertestSlotsImplicitEnvironmenttestAsSmallerPowerOfTwo%testDefinitionOfTraitedClassWithSlots testCqsort testAddNiltestPackageOfRemovedTraittestMySelector firstIndextestVeryDeepCopyWith%testExistingInstanceVariableAccessors passArraytestDecodeCustomNewline!testDegreeSinForExceptionalValuestestInvalidPatterntestInstantiationtestTraitRemovalWithTraitAdded isEmptyOrNil'testCannotChangePepperWhenPasswordIsSettestCreatePlotWihtKernelDensityindexOf:startingAt:5testGetShapesFromRectangleInCompositeWithChildOutside!testClassAdditionWithClassRemovedtestSizeSignedLongUnixtestLayoutNotEqualstestAddClassNoDuplicatesort:testMetaclassInstanceVariablestestUpToWithByteArray testCenter+testButtonUpClickShouldModifiedPreviewFinal key:value:testInitialResultListIsEmpty.testSetColumnTitleInPresenterShowsThemInWidgettestIsBitsLayout"testBehaviorWithCategorizedMethodstestIsParagraphSeparator separators testBinding!testStoreTwoSettingNodeSeparatelytestSumSignedInt32XtestNotAffectedByChangeOfOverriddenMethodFromAnotherHierarchyWhenSameMethodExistsHereTootestIncludeSelectorOfClasstestDeadContextSourceNode$testNonResumableFallOffTheEndHandler#testTestCasesEndsWithTestOrTestCasetestAddSharedPooltestDefinedClassIsUndefined%testCopyForBehaviorDefinitionForClass testKeysDotestLastIndexOftestRomanPrinting testAnchorIsAttachedToItsTarget2resulttestUseUndefinedClasstestCompositionFromArraytestBuildDiffFortestConcreteArchitecturestestLinkItalicAPIToAccessTexttestBackwardCompatibility3 character+testDetectIfFoundIfNoneWhenSomethingIsFoundtestFromHeadDetect testPowScaletestOptimizedBlockLocalNilling1ThreadedFFI-UFFI-Overridesright,testStandardMetaclassTraitWithMultipleTraitstestCleanBlockClosureerror:"testConvertingToSomeHierarchyScopetestRechainWithChainstestIfNotNilIfNil0ArgAsVar3testInstanceCreationMajorMinorSuffixBuildCommitHashtestBlockWritesInstanceVariable+testInstanceVariableNamesMetaclassInterfaceItestCollectionWithSingleWithALotOfElementsReturnsTheRequestedInCollectiontestCopyReplaceFromToWithtestWindowCreationAndDeletion.testMetaclassInstanceVariableAdditionWithTraitSpec2-Morphic-Tests9testInsettingByRectangleShouldNotProduceNegativeRectangle#testRemoveShadowWhenShadowIsRemoved!testAddTemporaryVariableTransformtestWriteSlotNamedValue$testChangingAnAliasedMethodIsUpdatedtestBinaryFormatParameter!testEscapeCharacterTwoConsecutivetestCallbackInLooptestOldPeekBack"testMajorMinorWithSeparatingStringBaselineOfRTreeSystemCommands-ClassCommands testBinsStrattestTwoConsecutiveCloseGroup intersection:testNewPointerClass testIgnore9testAddMethodByUsingATraitDoesNotAddTheMethodToThePackagetestUTF16EncoderByteOrderMarkCtestWhenOpenADirectoryShouldDisplayHisChildrenFilterByCurrentFilter&testModifyProtocolOfMethodyDoesNothing'testParentResolutionWithRemoteReferencetestUTF8IllegalInput)testFailureWhenTemporaryReadBeforeWrittentestAddTagNamestestAnonymousClassAndSelectortestFailureNonExistingVariabletestPragmaAfterBeforTemp6testChangeInSharedVariablesShouldAnnounceClassModified;testNewLineWhenSelectorAndBeginingOfParametersWillBeTooLong1testMoveToNodeKeepsStackWhenAimedNodeIsMethodNodetestSelectShapes** testTypes+testClassifyUnderWithProtocolFromOtherClassisEnclosingMark testPragmaAttestInheritableVariableRtestReplaceTokenAfterMovingCaretToMiddleOfWordWithFollowingWordsReplacesEntireWord newFirstIndextestAddMCPackageCreatesAPackage(testWhenCanvasScaleChangedUpdatesShadows sizeLimittestSumUnsignedInt16testMutualExclusiondetectIndex:ifNone:testExampleSimpleBlockArgument2)testResolveClassVariableShouldBeInt32TypetestExampleTwoSlotWithStatetestOnForkSplit testEncodeCRtest6kColorPicker-TeststestIsProbablyPrime'testEqualSignForSequenceableCollections!testModelReplaceMethodOnlyInClasscopyReplaceAll:with: testEnqueuetestFutureExecutestestLayoutWithOverlayIsNotEmpty#testLinesOfCodeEmptyLineInTheMiddletestRemoveOneElementtestPragmaAlreadyExists'testBeginsWithFilterReturnsValidResults"testParagraphEnvironmentParagraph3testWidenOnErroneousMethodtestNoEmptyPackagescorner: maxElementtestResignalAsUnwindstestWriteAndReadCompiled.testResolveConstantNULLShouldBeVoidPointerTypetestPrimIdentitylastRuntestExampleIfIfNotNilReturnNil*testConfidencePercentageIsCorrectlyChangedhumanReadableSISizeStringargmaxtestDottedRepresentationtestGetBindingsItemsForMatchMonticelloRemoteRepositoriestestSteppingReturnSelfMethod-testCaseSensitiveFilterIsNotNarrowThanNegatedtestNoErrorCatch2testIsAffectedByChangeOfOwnMethodWhichIsOverriddentestSharedClosureEnvironmenttestPredecessorstestLinkAPIToSetTexttestTagsCollectiontestSelfEvaluatingComplexCasetestOtherDictionaryEqualitytestChildOfPathtest0FixtureEmptyTesthumanReadableSISizeOn:testShortcutKeytestOpenPresenterIsBuilttestFaultyScripttestAnalogousCodeToAthens-MorphictestNoPeriodAtEndOfMethode'testSmartQuoteSurroundsEscapesSelectiontestAliasWithMultipleAliasestestDeterminanttestFindCyclesOne minElement testMultiline testFibonaccitestIncludeClass%testBroadenFilterShouldResetTheFiltertestUsingMethods)testExtractSetUpAndConvertTempsToInstVars(testClassAdditionWithClassAlreadyRemoved"testTargetInstanceGarbageCollected,testAPrefixForClassNameStartingWithConsonanttestThreeWayCompareTotestIntersectionsWithSegmenttestSingleUppercaseLettertestInlineTemporary$testObjectCentricBreakOnceOnVariable$testIsOfflineTrueAndResourceNotFound shallowCopy!testNextPutAllFlushOtherEndClosedtestSelectShapeWithShiftClicktestCartesianProductDotestReplaceMethodOnlyInClass$testLayoutWithFirstElementIsNotEmptytestDependenciesSizeTochtestSelectItemRaiseEvent property:testWriteComputedSlotCompiled WriteStream:testUpdateNodesForVariableDebugPointAfterRecompilingMethod testBitStringtestStepTwoBytecodes'testLinesOfCodeEmptyLineWithTabInTheEndtestBasedOnEmptyBasistestWhileModificationAfterasDigitsToPower:do:testOneRemoveFirsttestSetMovieDirectortestSelectsAbstractMethodtestReferencesToAClassInBlock2testReentrantBlockOldEnvironmentWithBlockArguement2testCancelCompletionInClassWithDynamicExtentLogsIt3testSkipToPcDoesNotLoopWhenAimedPcIsBeforeCurrentPctestPullUpVariableTransform!SystemCommands-SourceCodeCommands>testCreateSubclassOfArbitraryExpressionReturningNilThrowsErrortestBasicReadOnlytestMultiPartAlternative*testLogLocatorDefaultSmallestPowerIsMinus3testSplitStringOnBlocktestVariableCannotExtendByteisConnectorPunctuation:testIsInRectangleIsOutside%testNextNameForExtensionBrokenPattern*testStoppedSchedulerExpiresRemainingDelays)testLeftWithoutResultsDoesNotCloseContext testItalic!testStandardMethodInExistingTrait testOpeningMonticelloTonel-FileSystemaSelectionBlock RectangletestWithNullElementtestShouldAcceptIntegertestUpdateAllSettings'testBoxShouldBeInsideContainerRectangleTranscript-NonInteractive-Tests)testCloneMethodNeedsToBeInCopyingProtocoltestLiteralSymboltest4BitDisplaytestFromInstVarVariabletestSeveralArguments testInstSizescanner5testWordsAwareIteratorFiltersLeftOutBecauseSecondWordasDigitsAt:in:do: testNextLine testPharoCodetestBasenameNoParent)testLogLocatorRaisesErrorWithNegativeData testBmp24Bit KeyNameTable#testContainsOnlyExtensionDependencyRoassal-Chart-Tests testNewTraittestAddAlreadyThereDoesNotCount testTooLongBlockBodyWithArgumenttestHasNonLocalReturn+-<>testStructureOfAnchorReferenceMetacello-Gitlab-Tests#testFutureFallbackToFailsIfBothFail testLiteralnd#testTerminationDuringNestedUnwindB2;testInstanceVariableIsUsedInExtractedCodeExpectGotExtracted testChanges&testExternallyAllocatedNestedStructuretestGetMeanOfDataset testUsers testMetaDatatestSideNearestTotestPrimitiveStringtestSizeSignedLongWindows!testBecomeForwardCopyIdentityHash testToCount3'testMutateObjectLastInstVarWithManyVarstestAreasOutside2testTooLongBlockBodyRunArrayofSize:testUpToAfterCloseNonSignalingtestIsAffectedByChangeOfSubclassMethodWhichOverridesSuperclasstestConvertFromDecimalFractiontestOneGBAllocationRoassal-BuildersthisXtestKeywordOnTheSameLinetestDoubleWordClass*testMethodClassBindingShouldBeClassBinding testCreateNormalClassWithPackagetestWatchVariablesInClasstestInlineMethodCalledAsSupertestAddTagsToAClass$testCaretAtBeginningHasNoWordAtCarettestPreorderSelecttestModifiedReturntestClassRemovalSystemCommands-VariableCommandstestLayoutIntegrity testAtPin6Calypso-SystemPlugins-Traits-Queries-Tests-PWithTraits(testRenameProtocolAsWithExistingProtocoltestBasicFourDirections testHexStringCtestStepIntoQuickMethodCallNotReturnedShouldLeaveTheValueStackEmpty testFromPointtestIfNilIfNotNil1ArgtestParseFunction testAuthortestChainBehaviorRemoveBehaviortestIvalidReadFrom testAngleWithtestDemoteToRPackageNamedtestGenerateGetter testAssignmentOfGlobalVarBindingtestGetPharoVersion=testExplicitRequirementTakesPrecedenceOverTraitImplementationcopyReplaceTokens:with:Roassal testTransformOneOfManyStatements$testStoreIntoLiteralVariableBytecodeBaselineOfDisplay"testProperConvertingProtocolIsUsed)testSuppressInformUsingStringMatchOptionstestRedundantSeparators.testCastedTypedConstantIntegerHasConstantValuetestDiamonProblemIsNotConflicttestRetrievesActiveScope!testAnnounceWhenShapesAreSelectedBaselineOfSpecCoretestInfinityCloseTotestBoldAPIToAccessTexttestObjectAllSubclasses"testCanCreateFileRepositoryFromUrl,testObsoleteClassIsRemovedFromUsersClassSide"testFailureNonExistantSelectorNametestExtendingPathtestChangingDeleteSlotAddVartestCodePointEncodingDecodingtestSizeUnsignedShorttestAtOutOfBoundstestFirstTagWithValuetestEmptyBlockArgprintPathOn:delimiter:%testMutateWideSymbolUsingPrivateAtPuttestCanConsumeLineOtherBlockstestIncludesIdentity8testClassVariableDoesNotDuplicatesSubclassesOfSuperclassreduce:testUsingClassestestMetaclassSuperclassJtestWhenPathTextInputPresenterAcceptShouldChangeFileListWithTheGoodContent withIndexDo:testCopyWithAlltestRenameClassFromTraittestCompositeTransformunzip.testShouldFindDependencyWhenUnimplementedCallscontents.testErrorSignalledDuringStepOverShouldBeCaught testPragmastestFocusRotationBackwards2testPackageCommentToolIsValidWhenClassGroupContexttestWhenDisabledShouldNotLogtestRealizeAbstractClass-testIteratorOnACollectionReturnsTheCollection%testCurrentPluginIsSelectedInDropDowntestSizeSignedLongLongZtestWhenClickAnBeforeHistoryButtonIfThereAreHistoryShouldComeBackToTheLastDirectoryVisitedaDateifTrue:ifFalse:)testClassOrTraitNamedReturnsNilForGlobalstestResolveRelativeReference!testPerformAddRemoveClassVariabletestUTF16EncoderWide1ex yesterday findLast:BaselineOfOSWindowtestLiteralCharactertestInstallCounterRtestReplaceKeywordTokenWithCaretInTheEndOfWordWithFollowingWordsReplacesEntireWordtest6testReferencedPackages testComparisonWhenPrimitiveFailstestInsideTriangleWithWith)testFigureWithBracketInsteadOfParenthesestestSelectsMethodWithCountertestOverlaysAreAddedInOrderb testHasFiles isInteger testRegistertestAllInstVarNamestestPassingStructureInTheStacktestOccurrencestestNotLitteral#testCreateClassWithTwoPropertySlotstestIsVariableBindingtestFractionPrintingtestBeHomogeneous*testNarrowingFilterShouldNotResetTheFiltertestInBlockTempShadowingnewFrom:testPointerCannotExtendWord2testVariableDebugPointNoRemoveAfterSubclassRemovedtestDisableSorttestSizeInMemoryOfCharacterstestNewEnvironment testOneColumntestSelectorEnvironment isOctetString testSearch/testUpdateMethodAnnounceModificationOnlyInTraitSystemCommands-MethodCommands%Calypso-SystemPlugins-FileOut-QueriestestAccessingVariablesInBlocktestUnsignedInt64testCanUnderstandInSubclasstestIsEmptyFromEmptyMethodScopeh:s:v:Metacello-TestsCore Random-TeststestAddressesIntestNotWrittenInMethodtestRenamePackageToOwnTagName7testDTTestCoverageResultTheSecondNodeSubResultsAreLeafs testMergingOverlappingRectanglestestNewLineAfterCommenttestWatchVariablesWritesInClasstestFileOutSingleClassAdditiontestDoesNotDisplayEmptySlots:Calypso-SystemPlugins-Traits-Queries-Tests-PExtendingTraitfirstKey+testSelectionIntervalNilUnselectsEverything)testAddParameterThatReferencesModelGlobaltestIsRootDirectoryWindowsDriveaSequenceableCollectiontestModifyClassTraitComposition4testCompletionWithNoElementsToFetchShouldNotHaveMoretestHomeweight testTrait3testVisibleAreaWithScale8testTearDownMethodInSUnitTestsNeedsToBeInRunningProtocoltestLabelsTopPositiontestExistingClassWithClassSlot==>BaselineOfPharotestJumpOnEndOfSource/testBroaderFilterCompletionShouldBroadenResultsNewTools-WelcomeBrowser testSubtractiveConflictlessMergetestByteArrayEmptyRoassal-Interaction-Tests@testInterruptedContextEqualsSuspendedContextOfInterruptedProcessTool-DependencyAnalysertestSenderOfASelectorInBlockBaselineOfMisctestInt16AliasestestFailureMovePrimitiveMethod"testClassSideDefinitionIsClassSide#testNewWindowDefaultsIsNotMinimized*testDynamicLiteralArrayIsNotInLiteralFrame weekdayIndextestCompileForInFuzzyMatcher-TeststestTwoElementsRectangle+testWaitTimeoutSecondsOnCompletionOnTimeout$testCompileWithProductionEnvironment3testFutureSuccessCallbackExecutesInSameWorkerRunnertestPreconditionNotEmptyClass collectBlock0testUnnarrowingAndThenNarrowingReturnsSameResult$testNonExistingStoredSettingVariableoneIndextestLabeledOuterShapes03testRawUnevaluatedUnifiedFFI-TestsSystem-Object Events-Tests$testSequenceOfClassAndMethodAddition testHasNexttestEscapeTripleBold1testStartButtonHelpIsCurrentPluginStartButtonHelp)testRemoveProtocolIfEmptyWithRealProtocol8testLocalMethodsOfTheClassShouldNotBeRepeatedInItsTraitstestUnaryNoExtraSpacesBetween2 MetacelloCommandLineHandler-Core$testEnvironmentCitationWithArguments"testTraitHaveUsersInstanceVariableisControlOtheroptionInlineIfaveragetestBecomeIdentityHashtestFloatCentertestCyclesWith testClassSidefoundIdxBaselineOfFlashback&testBreakDebugPointOnClassVariableReadtestIsVisitedOrInStack'testNotEnvironmentWithClassEnvironments testMovingexpectedLiteralValuetestWidenOnCascadesqueezeOutNumber!testConvertFromNonDecimalFractiontestUTF8%testNilIfNotNilWithArgumentReturnsNilspecialCharacterNamestestComparisonOfFunctions)testTempNamedShouldFailGivenNameIsNotTemp+testSlotAdditionShouldAnnounceClassModifiedtestInlineMethodForSuperSend(testPackageTagRenameWithPreviousRollback,testSelectingPackageWillUpdateTheClassesListtestDiffWithLinesRecordsDeletetestRemoveLeaf1testSimpleLookup myElementtestWikipedia1testNegativeIntegerPrintingtestUniqueNames actionBlocktestCentralAngle,testBinaryMessageFormatCommentsWithStatement'testFailureInlineArgsWhitoutSameLiteral testBorders testRedirecttestRevertOverrideMethodtestRemovePath%testAllInstanceVariablesDefiningClasstestCompiledMethodPackagetestExampleSimpleBlockReturnMCMethodDefinition#testAddAndAddInstVarNamedWithTrait2testHeaderWithItalic+testEqualMethodNeedsToBeInComparingProtocol testNewPersontestInitializeWithPackagesSettestChangeRemoveManytestPerformCompositeChangetestBuildParseErrorHeuristic+ testCopyUpTotestValidTraitComposition2testExampleTempNamedTempVector$testAddRemoveBreakpointKeepTimeStamp appreciatetestRemoveSelectedCompositetestVariableIsNotAccessedtestLhsat:at:removeDuplicates"testPackageIsUpdatedInInstanceSide!testClickingRadio3DeselectsRadio2testMatchMethod3testRectangleWithNegativeExtentShouldHaveZeroExtent testLookingSubstringShowsResultsRing-Definitions-MonticellotestNotSelectsNotFFIMethod5testWritingStoredSettingNodesShouldNotCloseFileStream testAtEnd2testUtf8CalloutShouldSendUtf8EncodedStringArgumentlastIndexOf:ifAbsent:testBehaviorWithOneMethod$testInitialContentOfSuspendedContextidxtestAddBeforeAndRemovetestSigned1ByteIntegerstestMakePackagesDiffOnSameGraphtestShuffleChangeOrder3testDefaultSettingValueIsNotIncludedInTheStoredFileMonticello-TeststestWriteAndReadReflectiveasStringOn:delimiter:last:%testAbstractClassesShouldNotBeVisibletestModifiedReturnFromClassSymboltestSearchStringtest0FixturePrintTest testStoretestGifWriteReadUsingFilestestNewWindowShouldBeSavetestCompileWithNilClasstestUniquenesstestDefinitionWithSlotstestActiveHomeCleantestLastIndexOfStartingAttestIsNotAbsolutetestItalicsWithoutClosure\testReplaceKeywordTokenWithCaretInTheEndOfWordAfterCaretWithFollowingWordsReplacesEntireWordtestMultipleCountersnewFromKeys:andValues:"testJoinArrayUsingSortedCollection.testRemovingMethodsThatOnlyReferenceThemselvestestZiptestBlockArgument.testSubClassWithComplexTraitsAfterModificationtestReplaceAllWithtestLinesOfCodeAllInOnetest0FixtureCreationWithTesttest2BitColors&testWindowLabelSetAfterPackageCreationtestDebuggerTempAccess!testConflictsAliasesAndExclusionsFreeType-Graphics testLineStartIsInitializedToZeroDelay+testAddTreeWhenNoContentInFileShouldSucceed&testShouldKeepHeadReferenceAfterReOpentestHasDefaultClassLocalScope#testLineStartIsCorrectAfterNewLinestestNonExistantNamewrittentestBigArrayWithExtraSpaces#testSingleParagraphWithIndentedText anySatisfy: testWithRBstestUTF32EncoderExampleFromD99 isLowercasetestStSerializationtestMathBlockWithBadClosure&testMutateObjectInstVarUsingBasicAtPutReflectivity-TeststestRawsDoesNotHandleWellEscapetestResponsibility&testBestNodeWithValidSelectorMidSourcecurrent testWithRB8testOutgoingConnectionsOfexampleLiteralWideSymbol(testRevertCurrentMethodToSelectedVersiontestClassMethodDefinitiontestDeclareGlobalselect:thenCollect:+testAnalogousCodeToTakesSelectorIntoAccounttestKeywordFormatReceiver2 compare:with: testBasicSizegroupedBy:having:lastSpacePositiontestReferencedClassestestFileOutSingleTraitRemovaltestCanBeEnumeratedtestBinaryStreamtestKeywordOnTheSameLine3testOldDefinitiontestHasPackagetestStepOverLiteral6testDoubleClickActivatesRowInDoubleClickActivationMode,testEnvironmentWithNoEmptyBeforeTheEndMarkertestTransformingDeprecationClassDefinitionPrintersFile delimitersecondstestClassUsesTraittestCustomAlphabetFullSpectrumSystem-DependenciesTests testFailureSuperclassIsMetaclasstestByteArrayRangeSpec2-Commander2-TeststestHandlePrefixTabstestRegisterClearRedo testStepIntotestLargeShift>testIncludeInstancesFromAllAnnotatingMethodsOfAnyClassInSystem"test0FixtureDictionaryRemovingTest&testToolsToRemoveWhenManyToolsToRemove#testSubClassAndAddComplexTraitAftertestBan2 testBenchFortestChangeSuperclasstestPushConstantTrueBytecode-testOwnMethodsTakePrecedenceOverTraitsMethods Regex-CoreBaselineOfKernelTests#testIsBoundToEnvironmentWhenScopeIsMorphic-Widgets-Tree,testDictionaryConcatenationWithoutCommonKeys allButLast:RottenTestsFinder-Testssub(testFillingWithClassAndItGrandSuperclasstestEnvironmentWrappertestMethodRemovaltestIncludesKeysqueezeNumberOutOfString:keytestContention1MtestTraitExplicitRequirementMethodsMustBeImplementedInTheClassOrInASuperclasstestDefiningNode'testCanCreateBitBucketRepositoryFromUrl testRemoveAfterSuperclassRemoved%testEnvironmentWithBrokenMotherNestedtestFirstBCOffsetTesttestValueWithPossibleArgstestChangingDeleteSlot2Slots7testExistingPackageNamesDoesNotContainIllegalCharacterstestSorttestZeroValuestestRemoveProtocolIfEmpty&test0FixtureSequencedConcatenationTesttestTimeRefactoring-UI%testNoNewLineBetweenVariableAndIfTruecollect:from:to:testBreadthFirstSelecttestFork testFloatstestSingleArgBlocktestVariableEnvironmentInstVars9testRedefinedTraitedClassSubclassHasEmptyTraitCompositiontestBecomeForwardHashtestLoadMicrodownFreeTypeSettings$testIsSuspendedWhenItIsNotStartedYetCtestRefersToLiteralsReturnsFalseWhenLiteralNotInMethodPropertiesKeytestNoIconWithoutSorting testEquals4basename3testIteratorOnACalculatedCollectionReturnsOnlyFirsttestReadStreamDoifAbsentNot(testInBlockTempInstanceVariableShadowing/testAccessingMethodArgFromOptimizedBlockContextibonustestBinaryNoExtraSpacesBetween#testTrueIfFalseDoesNotEvaluateBlockNewTools-Debugger-FueltestSemiperimetertestKeyForIdentityinitialIntegerOrNiltestCompileEmptytestSmalltalkPrintStringVtestUndoOperationWhenTheUndoStackIsEmptyPreservesTheUndoStackAndTheRedoCollectionEmptytestHasNonDefaultValue_Default$testForcedRuleOnMethodWithPackageBantestSequenceIfNotEmptyifEmptytestWhileWithArgtestBuildPragmaHeuristictestDataReceive%testFamilyListCorrectAtInitialization'testSmartNeedExtraRemoveInForOppositeAt%testAtNonexistantKeyExecutesFailBlock position:,testRedundantMethodRemovalWithAbsentBehavior#testLayoutForSubclassDefiningSymboltestDistributiontestClassVariabletestHasArgumentstestCustomTransformtestHeaderCreatesInnerTexttestDisplayEmptySlotstestPullUpReferencesInstVar hsvSaturationSystem-CachingtestJumptestWorkerRunsInSeparateProcesstestAssignmentFormatVariable6testRestoredBrowserInstanceWithExpectedFlatQueryResulttestRedo2testKeepChangeWhenMethodAdditionWithAbsentBehaviortestReentrantBlocktestFirstItemIsSelectedtestChangingSuperclassToOtheridentityIndexOf:$testCopyReplaceAllWithManyOccurrencetestAsOrderedCollection testAddActorstestRenameProtocolAsWithNiltestTestClassesShouldBeSingulartestToDoWithCalculatedArgumentstestHasNullContextByDefault testInversionunescapeCharacter: testNoChangeInClassSlotsDetectedCollections-Arithmetic@5testTraitCompositionMethodsArePackagedWithTheirTraits:testTraitThatHasAPragmaHasCorrectTraitSourceAfterRecompiletestMemoizedLRUCache RubTextEditortestInstanceSidetestPathtestReplaceWithSpacestestRemoveMethodAnnounceRemoval/testReadIntoStartingAtCountFromStreamWithOffsetCaseInsensitiveOrder System-TimetestResolveStringtestWithEmptyUsestestAllNamedFromTotestBuildCreateCompositeShapestestRemoveClassVariable)testBlockWithLiteralReturnsLastExpressiontestNoPackagesOverridetestLiteralSymbols addNoSort:testYScaleIsCorrect=testFindThisMethodWithFullClassDoesNotIncludeOtherClassMethod'testSelectingOutOfRangeKeepOldSelection!testMissingExpressionAfterAReturntestwhichSelectorsWrite!testFileOutSingleProtocolAdditionOtestMultipleTempAssignmentWithOneReferencedAfterExtractedCodeExpectGotExtracted5testClassWithClassTraitCompositionHasTraitCompositiontestRootPrintStringtestCompileSymbol9testUtf8CalloutShouldSendUtf8EncodedLiteralStringArgumentprint:on:prefix:length:padded:asDate'testMethodAdditionWithSourceCodeChanged aBinaryBlock3testCompilerUsingCleanBlockClosureHasBlockAsLiteral!SystemCommands-RefactoringSupport numericSuffix'testAddFirstTwiceSetsChildrenSingleTimemerging:$testPackagesDiffToDisplayOnSameGraphtestAbstractClassVariable/testConfidenceIntervalMinIsGreaterThanQuartile1testReturnCoverageResultMorphic-Widgets-FastTableSystem-History-TeststestOldPharoConfigurationtestPrimNewWithtestExtensionSelectorsForClass)testWantsInitializationAddsInitializeSlottestSortedUsingBlocktest09addAfter8testIsAffectedByChangeOfAbstractMethodWhichIsImplemented"testPassingLongStructByCopyInPharotestNextIntoClosetestSystemPackageContaining testSpaces runningMin: testUnOrderedListAPIToAccessText testPackageextractBlockInTemptestEmbeddedOrderedtestEqualityClassSideMethodtestLoadErrorMicrodowntestConstruction!testSingleLevelListAllBulletTypestestSimpleUTF8ReadStreamtestItalicAPIToAccessText&testRemoveMiddlePageWhenLastIsSelected perform:with:testExternalLinkWithItalictestJumpOnSecondKeyword"testMoveDownInStackFromLastElement,testSequenceNextNextPreviousOpenSecondLessontestObsoleteClasses testIsHiddentestSelectFirstaddIfNotPresent:!testProperUtilitiesProtocolIsUsed,testRedefiningATraitAsAClassShouldRaiseErrorjoinUsing:last:testExtractSetupExample1 testIsEnabled foundIndextestBreakOnAccess testNewInstanceVariableAccessors!testChangeInSharedPoolsIsDetectedtestFromDetectIfNotFound testPadding testContexttestInvalidVariableNametestActiveProcessFromProcesor*testModelInlineMethodWithSameVariableNamestestwhichSelectorsReadtestSplitJoinOnSequence:testDeleteAllWindowToLeftOfAWindowWhenDontHaveWindowOnLeft testAccessors/testExplicitNotificationRaisesEventWithNewValue2testHeuristicBuilderForTwoHeuristicWrapsNonWrapper#testPoolVariableImplicitEnvironmenttestParseEmpty>testMoveToNodeWhenNodeIsNonInlinedAndEmbeddedInNonInlinedBlockColors endsWithDigittestBigReceiverInexactNthRootsuffixRPackage nanoSeconds:testSizeUnsignedLongLongtestAsClassRuleTransformationtestDependentPackages!testAutoLocatorNumberOfTicksIsOk3.testBestNodeWithInvalidPlaygroundParsableError>testEditClassOrPackageScopeAddingClassAndCompletingFullPackage indexOfAnyOf:"testFileOutSingleTraitModificationtestZeroRaisedToIntegertestOnForkErrorReturnsNiltestCompiledMethodCanBeExtended!test0FixtureDictionaryCopyingTest testAtWrap!testConvertingWithNewBasisObjects(testGTSpotterNewIsRemovedAfterAddingTexttestPrimesEncoding copyEmptyAI-Algorithms-GraphtestSetAsBreakpointPropertytestRecursiveMethod)testSelectingPluginWillUpdatePackagesListtestMedianForOddSizeCollection testSanitytestNoShadowingtestBuilderWithTraitsindexOfAnyOf:ifAbsent:-testNewLineBeforeStatementsWhenMultilineBlocktestPackageTagOfUnpackagedClass%testTutorialRaisesShouldBeImplementedtestBaseAndExtension testRechainWithChainsAndPreservetestPropertyWithOddCollatortestErrorWithErrorHandler)testMarshallingStringReturnValueWithAlias testRemoveElementThatExistsTwicebeBetween:and:testCharacterParameters'testNextIntegerOfSizeSignedBigEndianPuttestWriteStreamifPresent!testPerformRenameInstanceVariableBaselineOfGeneralTeststestAdditiveConflictlessMergeSortFunctions-Tests!testEmbeddedOrderedWithFormattingtestMissingZipCrc!testConvertingToAnotherScopeClasstestDefaultWithNoValuetestModifySelection testRemoveAlltestDoItExtraBindingstestWriteThenReadtestCompileNumber testAtLeastKeymapping-KeyCombinationstestCompileInClassasHextestWithAllMissing"testHasNonDefaultValue_AndSomeArgsMultilingual-EncodingstestCreationFromStringNotNiltestClickingRadio3SelectsItsorted:testBeStrictTurnsOptionOntestFromStylesheetAdapter2testAddingStatefulTraitToClassAddsInstanceVariabletestSumSignedShort testReentrantBlockOldEnvironment"testNotBoundToEnvironmentByDefaulttestAsSetWithEqualsElementstestDeepMultipleLookuptestMoveUpInStacktestThreeRemoveLink testLongCalloutDoesNotBlockImagecombinationsAt:in:after:do:,testTerminationDuringNestedUnwindWithReturn2testCommentBeforeMessage.testInjectingExceptionHandlerFromProcessItself%testSubscribeToEventDoesNotRaiseEvent testPointtestPrintOnBaseShowRadix copyWithout:testMoveToNodeRaisesErrorWhenNodeIsNotIdenticalToANodeInMethodtestAddSlotAnonymoustestDefaultUpperWhiskerletestUpToEndClosetestCopyWithSequenceablePolymorph-WidgetstestMultipleExtensionsat:ifAbsentPut:Collections-Native-TeststestIsShadowingtestFromHeadDetectIfNotFoundasValidSelectortestLastNElements#testForcedRuleOnMethodWithGlobalBan testTabIndent testBuildVariableGlobalHeuristic#testMutateByteArrayUsingDoubleAtPutNtestStatementNodeContainingReturnsStatementNodeThatContainsTheIdenticalSubtreeHermestestSizePointerfold:testTooManyTemporaries substringsAtestExistingTraitWithClassSlotsArePreservedIfChangingInstanceSidetestFillingWayOutside4testSetUpToolIsNotValidWhenReferencingDifferentClassNewTools-FontChooser testLocalPorttestRecompileDoIt requiredStart testTruncatedtestAddingSlotToClassSidetestSizeInMemoryLargeInstancesab&testStoreIntoTemporaryVariableBytecode testDoubletestWhileTrueExecutesLeftBlock'testClassModificationOfTraitComposition+testMoveClassInPackageWithExtensionsOnClass testAtLasttestUntypedNilArgumentIsNil testAddBeforeInstrumentationtestInstanceCreationMajorMinortestRenamePrimitive testAutoLocatorNumberOfTicksIsOktestOriginBasename1testResolveConstantTrueShouldSetConstantOneLoadertestStepToReturntestFailurePrimitiveMethodstestReturnHasNoExtraSpaceInsidetestRemoveEmptyPackagesAndTagsCollections-Streams-TestsCollections-Arithmetic-TestsexampleLiteralFloat currentIndextestDoItHaltBindingequals:testDependenciesFromSystemCommands-MessageCommandstestEditClassScopeAddingClassdetect:testHeapyyyymmddtestSimpleRetry,testPrecedencesAreGeneratedInClassDefinitionOtestMoveToNodeWhenNodeIsInBlockThatCreatesContextAndBlockHasBeenCreatedBackwardtestSelectIsNotShallowCopy testWithTitletestIsLetterModifiertestMutateIVObjecttestPackageTagRemoval+testAdapterElementsAreInSameOrderThanLayout5testRemoveNotEmptySuperclassPushDownInstanceVariablestestallMethodsAccessingSlottestExampleThisContexttestReadThenWritetestOptionAtifAbsenttestRepositoryUrlOSWindowDrivertestBinstestCycleAlreadyFound%testFailureInlineTemporaryBadIntervaltestNoRemoteBlockTemp testIfNiltestTraitWithComplexSlottestIsAboutToInstantiateClasstestEncodeSimpleStringstestErrorNonCorrectImage testMiddletestLoadMissingNodetestZombieMiddle,testPopularStringDoesReturnOnlyTwentyResultstestCreationOnBasisObjectstestMultipleConflictstestLocalHostAddress Morphic-CoreblocktestGlobalVariablesCollectiontestSimpleIsNested&testRebuildPresenterBeforeOpeningWorksColor DateAndTimeRing-ChunkImporter-TeststestCopyReplaceAllWithForSortedtestExampleReturn1plus2#testBestNodeWithValidKeywordMessagetestMarshallingTrueArgumenttestNoPackageSelectedtestActiveHome3testAcceptEntryLogsAverageTypedCharactersAtPosition"testFalseOrAnythingReturnsAnythingtestHasRequiredResultByDefaulttestKeepBlockInMessage&test0FixtureIndexAccessFotMultipliness$SystemCommands-PackageCommands-Tests testFileOutMultipleClassAddition)testMergeWithPredefinedFontCanBeDecoratedoptionOptimizeIR)testRedoOperationExecutesTheCorrectChangetestScalePolyLineartestOpeningBrowserCursorBaselineOfClassAnnotationtestIdentityIndexOfIAbsentTFCallbackQueueprintOn:delimiter:last: testParseTexttestHasPackageCaseInsensitiveeighthtestTokensInAsciitestBasedOnBasisObjecttestExternalAtPutFloattestPackagesOfClass&testRehashDoesNotTransformAssociations?testInstanceVariableIsAssignedInExtractedCodeExpectGotExtractedMetacello-GitBasedRepositorytest4BitColors testedValue6testUnselectAllInWidgetRaisesEmptySelectionChangeEventtestAnnotationPrintStringtestNonResumablePasstestExtractSuperExpectExtractedtestGlobalVariabletestPushConstantFalseBytecode6testCaretInTheMiddleOfSecondWordHasSecondWordUpToCarettestEmptyBlockTwoArguments"testIndexOfSubCollectionStartingAt!testToLongNewLine2WithSpaceBefore(testDetectIfFoundIfNoneWhenNobodyIsFound fromStream:testIsBaselineName;testRefersToLiteralsReturnsTrueWhenLiteralIsArrayOfLiteralsanObjecttestInvalidPragmatestFromStringUndefinedClasses3testWithExtensionAddsExtensionNameContainsExtension,testUniqueClassInDefinedClassesUsingAddClasstestCreationByMethodtestInitializationtestCharacterSeparatorstestFutureSelectFailsOnFailuretestTranslateBytestRemoveTraitFromComposition(testReplaceElementBeforeOpenAppliesStyleKtestCanRemoveUnreferencedClassUsingLimitedEnvironmentButReferencedElsewhere testSubtypingtestIndexesArraytestWidenOnStringtestAddAfterLast testSortedanArray testNotEmptytestLoadNotCorrectMicrodown testAsStringOnDelimiterLastEmptyIceberg-Plugin-MigrationtestKeysAndValuesRemovetestRemoveClassSlottestIntersectionsWithEllipseMorphic-Widgets-PolyTabstestWikipediaExample1testIntegerParametersnextPut: testStandardMethodInNewMetaclasswriter testBasicHeadaddAll:-testDTTestCoverageResultTheFirstNodeIsPercent*testFourthByteArraysReturnTheCorrectValues!testRemoveFromSystemRemoveAllTagstestAfterCriticalWaittestSourceNodeExecutedtestDensityCurveSampleNewTools-DocumentBrowser-Tests testPackages asIdentitySettestShowingLessonByIndex-testModelExtractMethodWithTemporariesSelectedtestComputeDependenciestestAnnotationBinding wordBefore: testExpandBytestIncludesAllNoneThereseparatorBlock1testExtraIndentationWhenKeywordMessageIsMultiline includesSubstring:caseSensitive:FridaytestComparisonWithCopy testProperManifestCategorizationtestHasProperty testDoWithout%Calypso-SystemTools-FullBrowser-Tests%testSixtyFourBitRegisterLeftRotateBy3+testFlatStructureLayoutSysVAMD64PostProcesstestPromoteAsPackagetestSimpleDefinition,testExampleWhileModificationBeforeNotInlined"testRemovePropertySlotWithInstance replacementCompression-Tests#testExampleTwoBooleanSlotsRemoveOnetestRemoveTaggedClasses testDivisiontestRemoveClassInstanceVariable)testExtractOneArgWithMinusThenArgsWithout&testDontRetainBlankLinesBeforeComments hslSaturation testComponent'testNotSimilarToDifferentKindAnnotationtestValidZipCrctestMoveClassToTagInDefaultTagtestBecomeForwardIdentityHashtestExampleTempNamedPutCopying3testClickFromMorph#testJoinArrayUsingOrderedCollectiontestSourceNodetestNoNewLineBeforeCascade2 testYieldttestBold!testUpToAllAfterCloseNonSignaling shuffleBy:testSiblingBlocksTempShadowingtestMetaDataEatsOtherBlockstestTemporaryVariablesBlocktestAtIfPresentIfAbsenttestMethodsReferencingClass starting:testIncludesNameGtestUnselectWidgetIndexRaisesSelectionIndexChangeEventWithSelectedIndextest0SortingArrayedTest testHasSlottestExampleIfTrue escapingWriteEmergencyDebuggertestindexOfStartingAt$testSelectingASecondElementSelectsIttestAsLowercaseBasicAsciiRange)testOptimizedBlockWriteInNestedBlockCase2testDefaultValuesVariablesLibrary numerator(testGettingSingleAnnotationUsingSelectortestJoinUsingLastOnArraytestSeenPackagesNametestStepToNonLocalReturn0testShouldGetPotentialMatchForUnimplementedCallsEnlumineurFormatter-TeststestTimeoutWithZeroDurationSpec2-Code-Tests6testSpaceAtTheEndOfFirstLineWhenMultilineWithArguments>>> OSPlatformtestHttpRecognizedtestSimpleEnsureSpec2-Interactions+testMultipleAssignmentHasNoExtraSpaceInsidetestAddInstVarNamedtestBlockExplicitReturntestCrossSumBasetestRemovePackageWithBreakpoint"testNoExtraSpaceArroundParenthesis"testBehaviorWithUnategorizedMethodtestCullCullCullCullMonticelloTonel-Core testSlotNamedtestLatin2EncoderDebugging-Utils-TeststestInt32AliasesnumberOfCombinationsTaken:testChevronIsWorkingOnClassSidetestFaultyInstalledMethod%test0TSequencedStructuralEqualityTesttestMaxExactIntegertestUsersWithClassChangesCollections-Support-Tests/testSupplyAnswerUsingTraditionalMatchOfQuestion testAddManytestSelectNoneThenCollect*testHashMethodNeedsToBeInComparingProtocolItestMoveToNodeWhenFromNonInlinedEmbeddedBlockToNodeThatIsNotInHomeContexttestJumpOnErroneousMethod Renraku-TestsSystem-Sources-Tests testRunTarjan2testInjectingExceptionHandlerIntoNotRunningProcesstestUndefinedFirstUnarytestVariableNotDirectlyDefinedtestPerformChangeClasstestIsOtherLettertestUnaryNoExtraSpacesAfter2testTwoClassesWithExtensions1testFutureFlatCollectSuccessOnMappedFutureSuccesssideOf:+testMoveMethodToExtensionAnnounceRepackagedtestJumpOnAssignment,testDeepCopyMethodNeedsToBeInCopyingProtocol testIsFaultytestSetIsReadOnlyFailure testNoRemoveAfterSubclassRemovedtestInlineBlockCollectionEM1 newSubstring testInvalidtestIndentsForKeywords2;testWindowShouldBeSaveBeforeShutDownSaveAttributesButNoRoot privateGreentestSizeUnsignedInt8testUnusedAlternateProvidertestUTF8EncoderWide&testInstrumentedMethodIsCompiledMethodtestSimpleUnresolvedtestAllButFirstElementstestValidateSameNewSelectorMonticelloFileServicestestTwoSpaceIndentPragmaCollectorNECompletion-TeststestDefaultingClassWhenNoTagfound testParseLineWithThreeCharactersBtestVariableByteClassWithTraitCreatedShouldntAnnounceClassModified"testShouldAcceptFloatWithoutMinMaxtestTypedTrueArgumentIsTrue:/testConfidenceIntervalMaxIsGreaterThanQuartile3testUnmatchedStringQuotetestConvertingToInheritedScope1testDoesApplyForMethodNodeInContextWithSuperclasstestLocalDirectory)testNestedLayoutModifiesHeightOfTopLayouttestAddProtocolAnnouncement testSorting02testBasenameWithoutExtensionBaselineOfThreadedFFI noneSatisfy:+testMergingOneRectangleReturnsThisRectangletestAsMultilineStringtestClassTrait$testDivideTwoByZeroSignalsZeroDividetestNewLineAfterCascade2.testColumnNotHomogeneousDiferentRowsAndColumnsgcd:testSmartCharactersOppositeOf.testObjectCentricBreakDebugPointOnVariableRead!testPopupOnElementNotAddedToAView0testPackageCommmentToolIsValidWhenPackageContexttestUnifyClassTrait#testFailureNewHierarchyExistingNametestSizeOfCycles0testLookingForStoreDiskWithSpaceReturnsDiskStoretestSystemDebuggerstestCollectThenDoOnEmptySpec2-Commander2.testInstanceSideMethodsWithNilKeyInLastLiteraltestSimpleColumntestAdoptInstanceflatCollectAsSet:"testBindingsTableContainsMatchingstestRelativeToPathtestReadtestMissingBlockArgumentNametestExampleSimpleBlock"testClassModificationWithHierarchytestAndEnvironmentWithStoreOn testAllEasing+testFindStClassProcessorTestWithPartialTexttestOrEnvironmenttestFilterMatching0Calypso-SystemPlugins-Reflectivity-Browser-TeststestUTF32EncoderWide>testTempAssignmentAndReturnWithTempReferenceExpectGotExtracted-testTypedDoublePointerVariableArgumentHasTypetestRegisteredPackagesbackendForTesttestBase64Encoded testRandomtestMouseClickShiftClick testNoChangeInSuperclassDetectedtestPositionsCustomNotSortedBtestVariableWordClassWithTraitCreatedShouldntAnnounceClassModified@testWindowShouldBeOpenAfterStartupWithGoodMorphWhenNoMorphIsSavetestReceiverDoesNotExisttestGetShapeFromRectangle testTopStackpi$testLowerThanFirstBCOffsetAccessTeststdout$testButtonUpClickWithoutSelectOption testObjectstestRemovePageAt asciiValuetestIndexOfSearchtestIndexesArrayWithCompositestestNewLinesAfterGluedCommenttestUnregister allButLastDo: testPercentOtestRecategorizeClassWithMetaClassMethodsRegisterAllClassMethodsInTheNewPackage;testIncludesMethodOfClassInPresenceOfOtherPackageExtensions testReferenceGtestMoveToNodeWhenNodeIsInBlockThatCreatesContextAndBlockHasBeenCreatedtestRenameClassInstanceVariableBaselineOfExternalProjectLoadertest1Bit testComma testAppendtestWhileTrueReturnsNiltestAddRemoveVariableBreakpoint#testTypedStringSelfArgumentIsString"testUndeclaredReparationWithSharedtestInstanceVariableRemovaltestLocalSelectorstestCountBehavior thisValue6testSubClassWithComplexTraitsAfterModificationOfParenttestLocalHostNametestBoundaryContainsatEndname%testChangeInSharedVariablesIsDetectedoptionInlineWhiletestDotDotParenttestSkipBlockNodetestAddProtocolWithRealProtocoltest4BitReversed$testRemoveAllTextPresenterDecorators#renameTemporaryFrom:to:in:selector:OtestChangeInInputSelectorWithNothingShouldChangePreviewLabelFinalWithFailedText hexStringtestDoesNotShowIcons,testWithBottomDoesNotProduceInvalidRectangle7testSubscribeToExistentNonObservablePropertyRaisesErrorafter:arcTan:testExpandedTrait3ClassTraittestStepIntoQuickMethodBooleantestTrue colorFrom:testBeNonStrictTurnsOptionOfftestRedundantMethodRemoval testPreorder testReadAlltestBehaviorParentRenamed testCreationtestNestedLeveltestTerminateSessioninstructionStream!testClickingRadio3DeselectsRadio1#testShiftClicktAccumulatesSelectiontestAddWithOccurrenceshomeRing-Definitions-Core-TeststestSelectsMethodWithBreakpointtestIsDashPunctuation testMergingtestParseBasicValue9testModelPushDownVariableToMultipleClassesInSameHierarchyYtestMoveToNodeWhenNodeIsLiteralOrVariableExecutesAssociatedBytecodesBecauseRelatedToStacktestLazySlotReadReflectiveBlock testBasenametestExtentWithBorderMintestRemoveTrailingDot(testAccessingBlockArgumentOptimizedBlock testPackageAttestTimesRepeatWithTempInBlocktestMaximizeWindowCollections-Stack-TeststestPngEncodingColors32System-Announcements anExponenttestWeakClassVariableReflectivetestNoLiteralIsPinnedInMemorytestStoreStringAlltestAsColorrefPrimaryColorstestFormatElementtestParentParent4testConvertingWithExtraBasisObjectIfItIsAlreadyBasis$Calypso-SystemPlugins-Critic-Queries FuzzyMatchertestNewFutureIsNotFinished$testProtocolRemovalWithProtocolAddedtestAlphaCodingasSettestResolveAbsoluteReferenceEnlumineurFormatter#testDataMatrixShouldHaveTheSameSizetestHelloWorldEncoding Roassal-PietestDate29Feb2000!testContainsShapeWithInteractions allButFirst)testClassUsingStatefulTraitsAndLocalSlotslast7Calypso-SystemPlugins-InheritanceAnalysis-Queries-TestsGtestVariableClassWhenTraitCompositionChangedShouldAnnounceClassModified)Calypso-SystemPlugins-DebugPoints-BrowsertestNewClassVariabletest05addBeforetestPackageRename%testTraitRemovalWithTraitAlreadyAdded testDequeuetestFromNamesWithOneDatatestModifyMethodWithBreakpointtestExamplePrimitiveErrorCode)testRemoveSecondElementRemovesFromAdaptertestFindThisMethodWithFullClasstestNodeForBCOffsetTestFullname:testwhenTextChangedDoat:put:!testWriteTemporaryVariablesMethod Ombu-TestsASTCachetestSingleRemoteTempVaroffsetSystem-Support-Tests(test0FixtureIterateSequencedReadableTesttestNumberOfMethodstestArgumentNames testStoreIvar$testClampReturnsMaxIfNumberIsOverMax rcvrElementtestSlotsAreNotDuplicatedtestInitializeFromtestToolsToKeepWhenOneContexttestUnsignedInt8optionInlineIfNil'testAsNumberNegatedWithoutDecimalPoint2testComplexSlots shorterLengthtestPrintOnStreamtestValidateEmptyNewSelectortestAxisLabelsAndTitle$testSenderLookupsMethodInSenderChainEpiceaBrowsers-TeststestLargeSqrtFloortestFloatPrintingMorphic-Widgets-TickListtestHasChildren testCapacitynegated testGettingAllRedefinedInstancestestUnclosedFiguretestInferiorOrEqual findTokens: testPointertestBan1testAccessingCreatedShapestestRemoveFirstNotPresent$testObjectCentricWatchOnceDebugPoint!testFixProtoObjectClassSuperclass testEmptyCodetestMethodContextPrintDetails"testCopyReplaceFromToWithInsertion testNewMovietestSimpleReporttestFalseIfTrueReturnsNil+testExampleWhileModificationAfterNotInlinedtestTwoDifferentGenerator(testTerminationShouldProceedEnsureBlockstallyInstructions:testAllSelectorstestRemoveLasttestRedoIfEmpty testBasic2testUTF8EncoderAuto(testAllClassPoolBindingHaveDefiningClassstderr)testBeHomogeneousWorksWhenExpandingWindowtestBadInstantiationtestRemovePasswordProtectiontestInitialActivationtestHidePresenterHidesWidget testAddClasstestTwoComplementRightShifttestChangeMovieDirector testNewMethodBaselineOfRingClap-CommandLine collect:into:$testClassNameNodeHaveParentReferencetestCompileFulltestExtractOneArgWithMinustestImportFromReadStreamtestExampleSimpleTemp"testExampleMethodTempInNestedBlocktestAutomatedFixCalypso-SystemQueries-Tests'testVennDiagramConvertsBigSetInputToSettestCartesianProductOfSize%testSubstituteVariableAtIntervalBlockSpec2-ExamplestestPrintLimitedString testVariableEnvironmentClassVarstestAltboolean8AtOffset:testErrorClassCreation-testPullUpMethodWithCopyOverriddenMethodsDowntestSignatureOnMultipleLinesoptionInlineCaseSystem-Utilities-Tests!testNonDuplicatesRemoveDuplicates testChangeInSuperclassIsDetectedtestRightClickShowsMenu9testWhenChangeDirectoryShouldFilesListContainsHisChildren testAmazonAWStestAtAtputEffectivelyPutAValue@testWhenAddingBookmarkOnIsolateBookmarksShouldBeAddToAllInstance minimumLengthnumberOfDigitsNetwork-KerneltestOrganizationDefinition2 testRecompiletestClickExecuteAction-testButtonDownClickShouldModifiedPreviewFinal.testModifyProtocolToExtensionUpdatesThePackagetestUpperPoint General-Rules8testCreateTwoUndefinedClassesOfSameNameShouldBeSameClass/testInjectingExceptionHandlerIntoProcessWithArg"testCanDynamicallyRebuildPresentertestValidNameAndUsedVariableClassAnnotation-TeststestWidenOnEndOfBlock testResolvetestUpdateShadowSize-testNegatedFilterIsNotNarrowThanCaseSensitive testTraitUse includesAll:~~#testBehaviorWithUnategorizedMethods!testHorizontalBlockFollowedByListtestTAddWithOccurrences.testButtonDownClickShouldModifiedArgumentsListassociationClasstestLogBrowserOperation smallSize#testFailureModelAlreadyExistingNametestPushLiteralConstantBytecodeRoassal-Layouts-UtilCollections-TeststestCompiledMethodLayouttestTraitImplicitEnvironment Morphic-TeststestSimulateCmdKeystroketestOriginalNameNECompletion-PreferencestestNestedStyles testCreateClassWithClassVariable testOnForkErrorOnSeparateProcesstestDoitContextCheckClasstestDistanceTotestEmptyArray+testRemoveNonexistentSelectorsFromProtocolsTool-DependencyAnalyser-UI-TabisSpaceSeparator:testBestNodeForClassVariableSelectionShouldBeClassSlotNode&testPrintPathOnDelimiterOnNetworkDrive testReturnTopraisedToFraction:testFailureExistingName testDumpStacktestEvaluateWithBindingstestMissingExpressiontestCompletionAfterWordnegative testNextPutAllStartingAtToStreamtestSpaceBetweenVarAndCommentHeuristicCompletion-MorphictestItalicsAndNestedBolds testNoTimeout#testLazyClassVarReadReflectiveBlockFormatter-SettingsctestNoExtraSpaceAroundPeriodAthens-SVG-PathConverterExternalProjectLoadertestNetworkPathWithParents-testOptimizedBlockWrittenAfterClosedOverCase1worldIceberg-Libgit bytesymbol System-ModeltestNBitAndNNegatedEqualsNtestPrimitiveRandomGeneration1;testInjectingMultipleExceptionHandlersIntoNotRunningProcesstestScaleLinearClamptestClickRaisesChangedEventtestHorizontalLine detectMax:FormtestValueWithExitBaselineOfFueltestPrioritySetBeforeStartbefore:ifAbsent: testPostOrdertestFormatReceivertestFigureInPresenceOfParagraphsitestMinimumSizeOfSearchStringtestReadInContexttestHasProtocolWithRealProtocol classSidetestDeclareInstVartestPharoVersionFileExiststestRejectNoRejecttestSubstraction pairsCollect:testDefaultWithValuetestAssignSuperVariabletestComparisonWithSimilarScopetestVerticalAttachPoint$testMinimumNegativeIntegerArithmetictestSubClassWithComplexTraitstestEmptyCaseStatement hasProperty:testRedundantMerge&testDemoteToRPackageNamedWithExtension!testStepIntoUntilTerminationCleantestNodeDistancesFromtestTabtestStylerRedLabeltestNoCredentialstestIdentityIndexOfKeyIfAbsentNewTools-FontChooser-TeststestDoubleRemoteAnidatedBlockstestAreSortedByPriorityBtestRemoveMethodComingFromTraitDoesNotRemoveMethodFromTraitPackage testWithDo/testBindingsWithUppercaseNameDoOverwriteGlobals3testNegatedFilterIsNarrowWhenTheInternalAreNarrowedtestOnePresenterShowsOneWidget testAtPutNil'findSubstring:in:startingAt:matchTable:,testAndPackageEnvironmentAndClassEnvironment"testUpdateSourceCodePanelUncoveredtestHomeGoesToStartOfLine factorPointtestEntriesCounttestInstanceVariableAdditiontestSizeUnsignedLongWindowstestLocalMessagesprint:testHaloIsDisable printStringtestInclusionForFloat(testDoNotKeepBlockInMessageConfiguration*testRestoredBrowserInstanceWithActiveScope:testUntypedConstantNegativeIntegerArgumentHasUndefinedTypetest0FixtureConverAsSortedTest superclass!testDegreeCosForExceptionalValuestestKeyStrokeFromMorphtestCallbackInSingleFunctiontestHasTemporaryVariablesMethod&testLastFilesForExtensionBrokenPattern3testUnoptimisedValueSpecialSendsMessageCapturesSendisZerotestVariableSubclass-testTwoLastExpressionsOfASequenceGotExtractedKernel-CodeModel-Tests=testWorkerInstancesAreCollectedAfterStartingAndStoppingWorkerSettings-GraphicstestCallWithSelfParameterNewTools-Inspector-TestsgroupsOf:atATimeDo:testSteppingAQuickMethod9testCaseSensitiveFilterIsNarrowWhenTheInternalAreNarrowed!MetacelloCommandLineHandler-Tests&testClassTraitIfMetaclassAlreadyExiststestJumpAheadTo#testEnvironmentWithAnyNestedElementtestHomeMethodtestUnresolveName!testAllSharedVariablesOwningClass'testChangeFactoryIsCorrectlyInitializedtestPushConsArray2testIsBehaviortestReturnDoesNotExisttestSignedInt8testDifferentBasestestFirstEntryIfAbsenttestAddingColumnUpdatesWidget5testuFFIMethodSelectorLookupsFirstMethodInSenderChaintestGrowPreservesElements testsEndsWithtestNilHashCollision8testComparisonOfSameQueriesWithDifferentRequestedContent+testMissingPeriodSeparatorBetweenStatementstestRaisedToErrorConditionsRegex-Core-TeststestFilterStringstestNestedExcursion testModelPushDownOnMetaclassSidetestFocusRotationForwardtestHighBitOfMagnitude testIfCutDoWithCutAndUncutsNoCutextensionDelimitertestPrimDivideargtestAddIncludesSizeReclaim#testConvertingWithNewRequiredResultfind: Calypso-SystemTools-QueryBrowsertestCombinations aCollection/testUndeclaredVariableWhenItIsAlreadyRegistered$testNextIntegerOfSizeSignedBigEndiantestMath emptyCheck(testIncludesIdentitySpecificComportementtestFailureNonExistantSelectortestLabeledOuterShapes02testRemoveAllPreservesCapacitySpec2-Adapters-Morphic cull:cull:taketestIndexFromPosition testThirtyTwoBitRegisterAddition monthIndextestExampleEmptyMethod)testSelectingANotVisibleItemDoesNotScrolltestExampleWhileNoModificationtestIsReferenced%testComparisonWithAnotherKindOfResultifFalse:testTypePerformsSearchtestItalicCreatesInnerText&testSerializationWithFuelMaintainProxytestSimpleEnsureTestWithUparrowtestVisibleArea5testSetUpMethodInSUnitTestsNeedsToBeInRunningProtocoltestUnixRandomGeneratorSeedtestFailureVariableNotDefined%testAdapterElementsAreInExplicitOrder testAsBittestVoidPointertestDecodeMimeHeader%testLinesOfCodeMultilineMethodCommenttestUnknownSlot)Calypso-SystemTools-OldToolCompatibillity:testThatFFIAdditionalStateIsFilledCorrectlyWith2ParametersSpec2-CommonWidgets$testResetingSelectionResetsSelectionSpec2-Backend-Tests2testDeprecateMethodUsingMethodWithSameNumberOfArgs testAtAllPut testHashBlocktestOneElement$testInitializedClassVariableCompiledtestVennDiagramTwoSetstestReverseUnevenDotestWorkerProcessDiesAfterStoptestExampleBlockInternaltestPushArgumentVariabletestPushConstantOneBytecodetestLineStroke testOccurrencesOfForMultiplinesstestSelectOnEmptytestSlideBlocIsParsed anotherIndex/testFFIMethodDelegatesWhenLookingForHasSelectortestExampleIfTrueIfFalseisSymboltestAllowInclusionOfNils"testAllSelectedClassesAreTestCasesbadSimpleExpressions testSize2 DebugPoints brightness,testModifyingClassKeepsOrganizationOfMethodsSpec2-Adapters-Stubtest03addFirst"testSimpleDefinitionWithTypedSlotstestSumUnsignedInt84testGlobalCounterReferenceAfterUninstallInstallationtestSplitJoinOnElementtestSizeCharEnum!testStructureHasCorrectSize64bits value:value:)testVennDiagramConvertsSmallSetInputToSettestMutateByteStringyUsingAtPut testDatabase$Calypso-SystemPlugins-Traits-BrowseraccumtestActivateReturnValuetestParseEmptyTextsecond"testClassTraitIfTraitAlreadyExists"testAnnouncerSuspendingWithStoringBaselineOfSpec2testMultiPartMixedtestUndeclareSlot testSubclasstestCriticalIfError"testMatchingTableContainsMatchings#testModifyingSuperclassInOtherOrdertestAsLayoutFrame testColorasPathSubscriptOutOfBoundstestStructureOfBoldNestedTexttestAddClassInteractivelytestMultipleDocCommentstestPrimPointXaStringtestSchedulesFIFOtestInferiorToMaximumat:at:ifAbsent:testSubclassesInEnvironment testAverageX6testRemoveFirstElementAddedAfterOpenRemovesFromAdaptertestCallCreateObject testSameModelme testLongLine(testFinalizationRemovesEntryFromRegistrytestAssignmentDoesNotExisttestAutoRepulsebluetestClassDefinitionToolIsNotValidWhenReferencingDifferentClass)testExampleTempNamedTempVectorInlinedLoopCommander-Activators-MousetestModelRenameClassClassParser-Tests:testSubClassWithTraitsAfterModificationOfParentSharedPools#testBlockArgumentIsArgumentVariabletestJumpOnNoParameterBlocktestValidTraitComposition3 Spec2-Layout-testUpdatingTheSameTraitDoesNotProduceChanges'testAsNumberWithSuperfluousDecimalPoint milliSecondstestOverlappingFormat2 testObjectCentricWatchDebugPointtestMinMaxValue testNumeratortestNewPresenterIsNotDisplayedtestClassWithoutChanges(testMarshallingByteArrayAsStringArgument$testWithPrecedenceUsesThePreferedOnetestTempFilePrefixSuffixtestNaNComparetestAutoLocatorIsDefaultexampleNonSpecialLiteralInteger*testInBlockArgumentPseudoVariableShadowingtestInCriticalWaittestUpToAllAfterCloseSignalingtestNewTraitAlias/testClassCompositionOnPrecedenceKeepsPreferencetestStepThroughInAMethodWithMNUtestBaselineOrConfigurationNametestIsInRectangletestStoreBooleanToSton testAddLastisFloatspeciesForTransform#testTraitAliasShouldBeFromAliasNametestLineStartStringContainingCRtestTerminateProcesses#testNotNilIfNotNilReturnsBlockValuetestHasSharedPoolstestEvaluateAndDotestCopyWithoutFirstOccuranceOf beginsWith:$testIsNotSuspendedWhenItIsTerminatedtestBuildCascadeHeuristictestFullRegistrationtestUTF8ReadStreamPositioningtestForceLazyRebuild testCategoryDebugger-ModeltestExampleSimpleBlockNested1testRemoveMessageArgumentCommandIsProperlyStoreOn localSecondstestRemoveFromProtocolstestRangeIncludes8testScrollDownToNonExistingIndexScrollsBottomToLastIndextestPointerCanExtendVariablebadExpressionstestGifWriteReadInMemoryRing-MonticellotestStructureOfAnnotationtestPropertiestestCompletionBeforeWord testHasBodytestContainsReference testReceiver9testRemoveAClassAndTheirSubclass2UsingAlimitedEnvironment add:before:testCopyEmptyWithout'testMethodRemovalWithMethodAlreadyAddedtestInlineMethod5testSuccessorstestRemoveSlotAndMigratetestFailureMethodAlreadyDefined0testLoadMicrodownResolvesUrlsRelativeToTheParenttestclassVarNames FFI-Kernel Calypso-Ringnot testLabeled03testFullClassTemplatetestSimultaneousRemovetestPackageRenameWithClasstestSuperclassChangeLayoutType3testNarrowingReturnsSameElementsThatCallingDirectlytestDigitAtPuttestRightMethodWrongProtocol GeneratortestSimpleSlidetestKeyAtIdentityValue"testSimpleDefinitionSuperclassNametestConstantBlockClosuretestValidGZipCrc Morphic-BasetestIncludesElementIsNotThere testBigMethodtestFirstAndLastLinktestTextWithStyle"testSelectionInFontStyleListIsKept0testAtIfPresentIfAbsentWithGarbageCollectedValue&testCreationTimeIsADateAndTimeInstance1testLogLocatorNumberOfTicksIsOkWithReversedDomaintestAbsnumArgs,testMoveToNodeWhenNodeIsInIfTrueIfFalseBlock testHasChangedForPackageItemDifftestPushConstantTwoBytecodetestSmartCharactersShouldClosetestWriteStreamExiststestTraitEmptytestKeyAtIndextestNodeForBCOffsetTesttestSimpleTableWithFormattingCollections-Abstract-Traits6testRefersToLiteralsReturnsTrueWhenLiteralIsByteStringDtestInsettingLargerThanRectangleExtentShouldNotProduceNegativeExtenttestExampleClassSidetestLabeledOuterShapes01,testAddProtocolAnnouncementDuringCompilationtestErrorOrderstestDoNotBreakSmalltalkVersiontestOpenPackagesChooser&testPackageOfTraitMethodIsTraitPackagetestNoExtraSpaceBetweenValue)testAcceptEntryLogsAverageTypedCharacterstestMetaclassWithTrait testRoundedtestFlipByCenterAttestExpandedPointClass testRotatedBy&testAddColumnInPresenterAddsItToWidgettestLowerLimit+testExtractMethodThatNeedsTemporaryVariabletestTEventVisitorClassTrait testEqual5testUnhandledWarningShouldBeProcessedAsUnhandledErrordecimalDigitLength'testAtIfAbsentWithGarbageCollectedValue%testMonitorAnnouncesUpdateWhenEnabled&testInlineComponentIntoCascadedMessageAtestWorkerInstancesAreCollectedAfterStartingAndStoppingWorkerPooltestRepeatWithTempInBlockhasInterned:ifTrue:testIfNilIfNotNil1ArgAsVartestModelWithCollectedDatatestHeavyContention2testSuspendForSnapshot$testOpenMenuCreatesCompletionContext$testObservableSlotAssignReturnsValuehourtestFailureExistingSelectortestTagsForClassesCollectiontestAddProtocolxaeven&testFailureInvalidNumArgsOfNewSelector7testEnvironmentWiathArgsWithCorrespondingClassIsCreatedtestByteCanExtendBytetestAddMovieDirectorTwice0testAddAtSamePositionTwiceSetsChildrenSingleTimetestOuterBlockTemporaryVariable>testCanCreateBitBucketRepositoryFromUrlWithExplicitHostAndPorttestPrimNotEqualSUnit-Support-UITesting-Tests|testMedianForEvenSizeCollection7testTransformReturnEmptyRectangleWhenNotPossibleToPlacetestAnchorReferencetestHasBody_nottestExtractMethodToSuperclass indexFromEndtestDangerousClassesConditionstestCreationOfDefinitions*-,testStepContextTakenConditionalJumpBytecodestestUnmatchedBraceArrayyin,testSettingTextManuallyAffectsTheUndoManagertestEnvironmentWithNamespace(testPrintString_AssignDefaultUsingEqualstestAsCommaStringOne testModifyFor.Calypso-SystemPlugins-Undeclared-Queries-Tests testDoItHaltTool-ImageCleaner%testMathBlockCaptionContainsMonospacetestSingleLevelList testOneGroup2testFailureHierarchyDefinesVarableNamedAsTemporary)testExtractUsingExistingMethodRefactoring testColumnstestReplaceWithPatternCode2testSpecialGestureOnInnerMorphPutsHaloInInnerMorphtestExtractSetupExample3testIndirectSequence0testBestNodeWithValidPostionOnStatementPeriodEndtestRemoveProtocoltestDuplicationsKindatestNumberOfHashIterationstestPremultiply!Microdown-RichTextPresenter-TeststestClassSideMethodWithImpactMessageNotUnderstoodtestDescendantsscaletestFileOutSingleMethodAdditiontestUsesPoolVarNamedtestSkipUpToIgnoresJumpsSystem-IdentificationtestTerminateInTerminatetestSmartBackspaceWithSelectionRing-RuntimeSupporttestInstVarNamedccminimumtestLabelsLeftPosition"testRevertingAllRedefinedInstancestestWithArgument testMethod testPrimModtestPeriodAtEndOfMethodetestSimpleClassVariablesnotices*testModelInsertClassFromBehaviorSuperclasstestCopyEmptyWithoutAll DrTests-TestCoverage-Tests-MockstestDoesntContainReferencePath#testHasSelectorSpecialSelectorIndextestOpenAndClosePresentertestIsObservableSlot$testRefreshCacheWithoutScanAllSystemtestSplitJoinBoundaryCasestestDefaultWithEmptyInput testModelMorphic-Widgets-MenubarexampleLiteralByteString)testUpdatingSelectionsOnUpdateWithRemoval3testClassCommentToolIsValidWhenReferencingSameClass testStoreTemptestRemoveClassTransform testIncludesAssociationWithValue4testTwoRectanglesWithAnAdjascentBorderDoNotIntersecttestNewClassVariableAccessorstestBasicBehaviourtestPlotExtenttestResolveAbsolutealike:testPseudoVariableShadowingtestNewLinesAfterComment2testInvalidLiteralCharactertestStringAsNumbertestLabelShapeHeighttestAllDirectories'testTraitDefinitionNodeIsTraitAliasNode&testAddAndRemoveInstVarNamedWithTrait2Announcements-CoreisDashPunctuation:testFailureNonExistantNamexc"testExpectedExpressionInBraceArray testDegreeCostestRedefineSuperclassCollections-Unordered-Tests"testMouseEnterEventIsNotDuplicated1testArgumentUsedInExtractedCodeExpectGotExtractedtestImplicitEnvironment testTakeFirsttestRedundantPackageTagAdditiontestMigrateClassVartestRenameInstanceVariable/testNewLineBeforeFirstKeywordDoesntAffectBinarytestEqualityInstanceSideMethodtestFlagtestAddTraitPattern'testGenerateBooleanArgumentNameForFalsetestRemovedSelectorstestResetUnwindtestLeftNewValueHolder-TeststestSelectAllShapesWithCommandAtestToDoArgumentNotInlinedtestTraitModification(testChangingPriorityYieldsCurrentProcess testCharCalltestBeforeIfAbsenttestReplaceFromToWith0testThirtyTwoBitRegisterLoadFromReverseByteOrder5testChangingShapeDoesNotPutNilInMethodsLastLiteralKeytestNotTheSame rgbTripletexp)testUnmatchedLocalTempDeclarationInABlock)testTypedStringSelfArgumentHasDefinedTypetestDeclareGlobalBlock$NewTools-RewriterTools-Backend-TeststestTraitCompositionWithCycles addMonths:testwhenSelectionChangedDo namedColortestTraitCompositiontestVariableCannotExtendWordtestToDoReturnsReceiver testMixing2)testImplicitConversionFromClassPropertiestestSign testTSortabletestDrawingWayOutside4test3testWithIndexCollect0testIntersectionTwoSimilarElementsInIntersectiontestRedefinedTraitedClassSubclassHasEmptyClassTraitCompositiontestCanonicalization,testBadPathRemovingNonEmptySubWithSubclassesendsWith:caseSensitive:reject:thenCollect: testWithRB4 testTempNamed+testIdentityIncludesNonSpecificComportement Text-DiffJtestAddMethodInExtensionCategoryMatchingNameAddMethodToTheExtendingPackage4testClassAddedToNewPackageShouldAnnouncePackageAdded$testIsExecutedFromConcreteScopeClasstestStrikesWithoutClosuretestCallReturningEnumeration-testMergingNestedRectanglesReturnTheContainer>=testSystemWide valueArray.testRenamePackageToOwnTagNameWithClassesInRoot7testCanCreateBitBucketRepositoryFromUrlWithExplicitHosttestOrdinalScale,testResetFilterShouldRetrievePreviousResultstestIsTestPackage#testAddClassAnnounceClassRepackagedtestSplitJoinIdentitytestPrintWithDelimiter!testGetQuartilesOfOddDatasetSize2testTooManyArgumentstestNewFromCollectiontestStylerRedTicktestEmptyInitializeOfAttributes>testLogLocatorSmallestIndexIsCorrectAfterChangingSmallestPowertestParsePatternASTIsForMethod testStackAttestWarnModelInheritedSelectortestSkipThroughNode1testSelectShapesWhenThereAreAlreadySelectedShapes$testStringColumnsShouldBeNonEditabletestModelRemoveUnusedVariable"NewTools-SpTextPresenterDecorators!testAddLabelledButtonAddTheButtontestPullUpInstVar testLayoutIn testSumFloatBtestPackageCommentToolIsNotValidWhenNotAPackageOrClassGroupContext8testIncludeForbiddenClassesAsSpecialForbiddenAnnotationstestTrueOrAnythingReturnsTruetestSortResultArray testEnsuretestNewFromSampleBytes&testIsTerminatedAfterManualTerminationtestValidZLibCrctestBoldsWithoutClosuretestPrimDoWithincludesSubstringAnywhere:testOpenInWorldtestInterruptedContextOmbutestIdentityAddtestHasCaption3testCannotChangeNumberOfIterationsWhenPasswordIsSetMenuRegistrationtestStandardClassWithVariablestestCopyEmptyMethodtestRechainWithChainsAndNil testComposite testAddTraittestUUIDVersion1testLiteralEqual#testNextVersionAlphanumericFilenametestMultiPoolstestAddIntructionsBeforetestFailureExistingPackage.testClassNameNodeIsPolymorphicToRBVariableNode>testClassCreationToolIsNotValidWhenReferencingDifferentPackage testEndPointcorner5testFalseIfFalseReturnsBlockValueWithTempOutsideBlocktestConcatenation testScaleByTool-ExternalBrowsertestAllFileTypedtestDataSending testBasicNew8testDictionaryConcatenationWithCommonKeysDifferentValues&testDefinedClassesAndDefinedClassNamesNECompletion-MorphictestFindCyclesThreeNodestestAdoptQuerytestRechainNilValuetestIsControlOtherMetacello-GitlabtestUndefinedVariable$testRemoveSenderIntoCascaded3Message)Calypso-SystemPlugins-Flags-Queries-Tests"testNextManyShouldReturnCollectionNewTools-CodeCritiques"testDynamicVariableRemovedAfterUsetestNotSelectsMethodWithoutFlagtestImportAMethodWithLangTag testReverseDotestKeyAtValueIfAbsenttestNotExecutedMethodListtestExamplePrimitiveModuleError@testRenameClassUpdateMetaclassDefinedSelectorsInTheParentPackageBaselineOfRoassal Equals-Tests#testRemovingTraitsUpdatesCategories"testSingleLevelList2WithFormatting testVariableEnvironmentAddRemovetestFastPointersTotestRemoveElementThatExiststestPositionsDefaulttestTransformReturnASubArea%testPassing4DoubleStructureInTheStacktestExtendingPackagesOfClasstestIsEmptyFromEmptyClassScope*testNonDuplicatesRemoveDuplicatesWithThree4testInitializedClassVariableReflectiveBlockParametertestExpandedProtoObjecttestFutureZipFailsIfFirstFails testResizing testRed16 testExample3 Manifest-Core"testUrlWithoutMicrodownParameters2testExampleSelftestChildDirectories%testMultipleMixedChunksInStrangeOrder3testResetFilterWithNoFilterSetShouldNotAlterResultscommentstestsBeginsWithEmpty*testSequenceReturnsTheSequenceOfAllResultsAtestPackageOfClassForClassesNotDefinedInPackageButJustExtendingItdayNamevalue testCreateTheRightFootnoteObjecttestFlatCollect2testReadFromWithErrortestJumpOnReturnSystem-HistoryTtestRemoveAllExtensionMethodsFromMetaAndInstanceSideUpdateOrganizerExtensionsMappingtestSubClassAndAddTraitAfter(testMutateObjectFirstInstVarWithManyVarsrgb testScopetestDontKeepBlockInMessage,testSystemPackageIsAnsweredWithLoadedPackageNSPerlinNoise2 testTransform slowFactorial Monticello-BackwardCompatibilitytestDeleteANonOpenWindowFailstestAddClassInstanceVariable,testSearchForExactCaseSensitiveStringMissingtestAssignClassVariable,testCorrectMetaDataWithEmptyLinesProduceJSONtestUTF8Overlong6testOptimisedPlusSpecialSendsMessageDoesNotCaptureSendtestThreeElementsContainstestKeywordOnMultipleLine13HtestDoesNotContainReferenceWhenUsingDifferentInstancesOfMemoryFileSystemtestResponsibilityEval!testAddBoxPlotsAddPlotsInTheChartCommander2-UI-TeststestAccessorsAlreadyExist+testTextPreviewerCanBeUsedOnParameterStringtestAnnotationsWithoutClosure testFloorLog$testCreateClassWithWeakClassVariablebyteAt:testColumnSpacingtestDoubleResumetestConsistentSortingDrTests-CommentsToTests-Tests!testMoveUpInStackFromFirstElementtestAllCallsOntestEquivalentTo!NewTools-Scopes-Resources-A-TeststestJumpOnComments testTAddTwice!testParentResolutionWithReference3testRemoveExtensionMethodRemoveMethodFromItsPackageBtestBroaderFilterCompletionShouldBroadenResultsWhenCaseInsensitive&testPerformAddRemoveClassInteractively&testIncludesComportementForDictionnarytestBuildingFnSpec?testRecategorizeClassUnregisterTheClassMethodsFromTheOldPackageformat:testBadPackageName SUnit-CoretestIsOfflineAndResourceFoundtestCreationByNamedParent testDividetestExampleBooleanSlot testPostorder/testTraitMethodClassBindingShouldBeClassBindingRoassal-Layouts-Tests1testHideColumnHeadersInPresenterHidesThemInWidgetManifest-Tests(testTypedPointerVariableArgumentHasAritytestSearchStringUpdateShadowtestFailureBadMethodNameCollections-AtomicRoassal-Global-TestsaSortedCollectionBaselineOfNumericScalestestRenameTestMethod1-testBestNodeWithValidPostionOnMethodPeriodEnd aSortBlocktestBeNotEditableAfterOpenWorkstestSimpleReturnSystem-UtilitiestestMinMaxValuesAreCorrect-testAcceptEntryLogsItsSourceInSeparateEntriesnewSizetestContextsAfterStepIntotestOptimizedBlockWriteInBlocktestFutureExecutesConcurrentlyNonInteractiveTranscripttestAsFloatPointtestHighlightShapestestSelectionStarttestNoTraceForEnabledHalttestSplitCascadeRefactoringencoder DrTests-TestsSystem-Changes-testBlockParameterWhenTheLineWillNotBeTooLongCollections-WeaktestReplaceElementAppliesStyleEpiceatestCreationByUnresolvedNamed newStreamtestBreakpointOnArgumentseed:testPathRelativeTofindBinaryIndex:do:ifNone: testMethodAttestIdentityIndexOftestPrintPathOnextensionWithDelimiter=testRemoveClassUnregisterTheClassDefinedMethodsFromItsPackagetestStoreOnWithNegativeInteger/testLastBcOffsetForNodeWhenMappedPcsAreNotEmpty-testFirstBcOffsetForNodeWhenMappedPcsAreEmptytestErrorsArePersonnalizedtestSignalWithTag testInvertedtestKeywordOnMultipleLine5isDecimalDigit:testExampleToDoValuetest0FixtureRemoveByIndexTesttoktestIfCutDoWithCutAndUncutsGraphics-TransformationstestClearAllDependenciesDoIt*testRestoredBrowserInstanceWithMethodQuerytestInstallMinimalMockClassbb!testUndeclaredReparationWithClasstestIsCurrencySymbolGtestPeriodAtEndOfMethodWithMultipleElementArrayShouldNotHavePeriodAtEndtestInstanceCreation&testHeaderIsHiddenWhenNoTitleIsDefinedtestSetIsReadOnlySuccess testContinueEncoutersAnExceptiontestLessonViewIsScriptingtestEphemeronClassIsEphemerontestCharacterizationtestHasCommentAST-Core-Tests testSendSuper&testLinesOfCodeSingleLineMethodCommentbar)testExtractMethodWithTwoArgsAndOcurrences6testCanStillExecuteWhenAimedNodePcIsBeforeInAnyContexttestCreationByNamed testCodePointcollect:thenReject:overlappingPairsWithIndexDo: testSelectAllPharoDocComment-TeststestTraitsAccessor testInferiorAtestInstanceSideInitializeMethodNeedsToBeInInitializationProtocoltestTempNamedPutselectEverySecond testIfFalseaSymboltestedTutorial/testNilIfNotNilWithArgumentDoesNotEvaluateBlock Roassal-Chart#testAssignmentHasNoExtraSpaceInside0testSourceNodeExecutedWhenContextIsJustAtStartpctestDifferentMethodsAreConflicttestWidgetExiststestFixObsoleteSharedPools test16Bit)testInferInstanceVariableUsedInInitializetestLowerLimitsWithtestNewVariableWordClassThreadedFFI-Tests*testTrueIfFalseIfTrueReturnsTrueBlockValue'testAddSelectorWithMethodClassifyMethod!Ring-Definitions-Tests-ContainerstestIsSortEnabledtest0FixtureDictionaryKeyAccesstestRemovePropertySlot23testMethodEditorToolIsNotValidWhenNotAMethodContext testUpToEnd,testTempNamedPutShouldFailGivenNameIsNotTempEpLostChangesDetectorrunningAverage:'testErrorProducedByAllocatingInTheImageFinalizationProcesstestHeaderLevel1NoSpace testAnnotated*testRemoveMethodAnnounceRemovalOnlyInTrait%testFourBackQuotesClosedByThreeQuotestestTitleLessonCreation-testDeprecatedAliasesAreRemovedByClassRemoval/testRenamingExtenstionProtocolToClassicProtocoltestNextNameForExtension1Calypso-SystemPlugins-InheritanceAnalysis-Queries ClassParser testSqrtFloortestComplexClassVariablesRoassal-Animation-Tests#testDeleteAllWindowToRightOfAWindow9testExtraIndentationWhenMultilineResetTheIndentWhenFinishtestIndexOfWithDuplicates7testRemakingATraitUsedByAnAnonymousClassKeepItAnonymous otherPointguardedlastDelimStringtestEnsureEndsWithtestRuleLoadsCorrectly:testUnselectAllInWidgetRaisesSelectionIndexChangeEventOnce3testSpecialGestureOnInnerMorphTwiceGoesToOuterMorphtestMultiLineMessagesClassSideBaselineOfPharoBootstrap pathStringtestChainBehaviorHitWithContext&testSmartDoubleQuoteDoesNotEscapeQuote6testArgumentIsNotUsedInExtractedCodeExpectGotExtracted/testFutureIsFinishedIfFailureWasAlreadyDeployedtestDataMatrixShouldNotBeEmptytestClassesShadow#testTryingToModifyReadOnlyInstances test5kClassestestSharedPoolNamestestGoOnMockTutorialtestFromSingleClass$InitializePackagesCommandLineHandler-testDynamicVariableAccessFromDifferentProcessNewTools-Debugger-Tests testSortingOrderedCollectiontestInstallingWithAnEmptyTagtestInitialCacheBuild'testLeftWithoutResultsBroadensSelection6testExplicitNotifyUnexistentPropertyChangedRaisesError IdentitySettestHighlightAllShapestestIsFloatPointtestDynamicDescriptiontestHasNonDefaultValuedo:separatedBy: testExpandedEpTEventVisitorTrait1testClassCreationToolIsValidWhenClassGroupContexttestSumSignedLongLong'testAddAtSamePositionTwiceReplacesChildtestMarshallingStringArgumentHermes-Extensions testAfterradiansToDegreesstartsWithDigittestTraitSourceCollections-NativetestWrappedElementOnBolddl.testQuoteBlockDoesNotInterpretOtherBlockMarkuptestUnpackagedClassesStartupPreferenceslast:testPackageOfUnpackagedClassPharoBootstrap-Initialization"testMathBlockWithParametersCaptiondoBodytestWithParentsOnRootReturnRoottestShouldConsiderHaltNodetestMissingMessageAfterACascade)testAnPrefixForClassNameStartingWithVoweltestEnvironmentWithArgumentstestDefaultDebugAPI)testEvaluateWithBindingsWithUppercaseName/testAsOrderedCollectionReturnsOrderedCollection'testCanHaveTagOfTheSameNameAsThePackagetestNumberOfDependentPackagetestBreakpointsForModeltestUTF8ReadFaultyInput testRenameProtocolAsWithProtocoltestWriteStream'testFailureInvalidReferenceVariableNametestFutureFallbackToHasSecondValueIfFirstFailsAndSecondSuccesstestFitInExtenttestReferencedBehaviorstestWidenOnSelftestFileOutCategory testOfSizetestDuplicateClassError testAsGLine!testNextVersionAlphabeticFilename"testFutureAndThenFailsIfFirstFailstestRejectAllThenDo FreeTypeCacheIntegertestIncludesAnyNoneThere translateBy:test0TSizeTestisDecimalDigit4testImplicitEnvironmentContentForMetaclassDefinition testFileOutMultipleMethodRemovaltestUndeclaredVariable Text-TeststestScanAllSystemDisabledSTON-Extensions testFillingWithClassAndItsTraitstestRemoveMethodTransform groupByRuns:ExternalObjecttestFigureWithBold Zodiac-Tests Shout-Tests testCompact asFloatPoint"testRestartTestShouldKeepTestGreenFlashback-DecompilertestResolvePathtestLimitBlocktestBmpWriteReadInMemorytestRoottestBoldAPIToSetText:testUnselectWidgetIndexRaisesSelectionIndexChangeEventOncetestSpaceAroundPeriodtestSigned4ByteIntegerstestTrueIfFalseReturnsNilnotEmpty Network-MIME#testExamplePrimitiveErrorCodeModuletestEmptyMethodReturnsReceiver)testProtocolRemovalOfUnclassifiedProtocol$testLayoutCanHaveMoreThanTwoChildrentestIconProviderCollections-Weak-Tests%testGoTwiceShowLessonViewIfNotVisibletestComparison,testMouseMoveWithoutDraggingDoesNotStartDragtestNoNewLineAfterCascade0testRenamePackageAlsoRenameAllExtensionProtocols.testBlockParameterOnTheMethodLineWhenMultilinetestIfNotNil1ArgtestChangingPcAssociatedToMethodOrSequenceNodeKeepsStackAsItIstestAssociationAt*testPackageOfMethodFromTraitsAfterCreationtestRedefiningTrait outputSetNewTools-Sindarin-ToolstestErrorTokentestSignatureNotOnMultipleLines&testAccessingMultipleVariablesInVectorroundedfoo:bar:%lastIndexOfAnyOf:startingAt:ifAbsent:testHasPrevious%testFailureWithNonCorrectNumberOfArgs'test0FixtureRequirementsOfTGrowableTesttestWritesSlot testBenchFib dayOfWeek testPushConstantMinusOneBytecode>testRemoveAllExtensionMethodsRemoveTheClassFromExtendedClasses asCommaStringtestReshapeSuperSuperClasstestReadsThisContextsztestReplacementWithMaxLength testTraittestOrderedListDuring testMaxValtestTwoSameGeneratortestUnequalSize&test0FixtureSequencedElementAccessTesttestRenameClassTransformtestAbsolutePathcloseTo:precision:testEqualityRelativeVsAbsolutetestNonDuplicatesRemoveDuplicatesResetReturnsWithoutDuplicates.testAddParameterThatReferencesGlobalAndLiteraltestParseAsBigArityPointer shuffledBy:`testMoveToNodeWhenNodeIsInBlockThatCreatesContextAndBlockCreationIsFirstBytecodeInFirstStatement8testNewLineAfterFirstBracketWhenMultilineWithTemporaries)testConvertingAsRestrictedByAnotherScope2testAddTwoElementsHistoryRead1testClassDefFromLegacyStringHasSuperclassNameNodeasTestSelectortestSubtraction,testFalseIfFalseIfTrueReturnsFalseBlockValueNewTools-MorphictestUnknownSlotsinstanceVariable:class:*testSizeInMemoryNormalClassesTranscript-ToolcopyReplaceAll:with:asTokens:testIsDictionary#testCreatingFullTraitHasAllElementsftestReplaceKeywordTokenFollowedByAssignmentWithCaretInTheEndOfWordWithFollowingWordsReplacesEntireWordtestIntersectionEmpty!Ring-Definitions-Monticello-TeststestAndSingleBitWithMinusOne*testNewFetcherWithElementsShouldNotBeAtEnd&testCreateNormalClassWithClassVariable testSetTitle/testWordsAwareIteratorFiltersByASequenceOfWordsfirst:&testFutureAndThenSuccessIfAndThenFailstestHeapForwards-testModelPushDownVariableToClassDownTwoLevels Roassal-SpectestCenterEmpty2testNumberOfSpaces4testSingleLevelListWithNormalNumberingWithEmptyLines testOnFromTotestUndoIfEmptytestPropertyValueAtPuttestShowSelectedMethodVersionparm testPrintOn2 testLastIndexOfIfAbsentDuplicate subtractDate:testAPIFromMessageSendReceiver!NewTools-Scopes-Resources-B-TestsFileSystem-Memory-TeststestSizeSignedChartestNodesForEachisIntegerPoint#testDefaultConfidencePercentageIs95%testSubstringSearchNonExistingPackagetestCompileAlltestPackageEnvironment9testUnselectAllInWidgetNotRaisesEmptySelectionChangeEventPharoCommonToolstestDraggingModifiesValue'testFutureReturnsAssociatedFutureObject-> includesAny:testallMethodsWritingSlotcloseTo:testFullSpectrum NewTools-FuelShouttestDragincludesSubstring:testHasNoArgumentstestSelectFiletestSumWithIntegerArraytestAssignInstanceVariabletestStepToReturnWithExceptiontestDefiningClassanItemtestSearchWithFunction!testHandlingWithSeveralExclusionstestDraggingOnDraggabletestEscapeMonospacetestTwoElementsContains%testKeyClassesArePresentInStartupListtestFlushAllSuchThat+testCreateSubclassOfNilCreatesSubclassOfNiltestOneElementRectangletestMethodContextDrTests-TestCoverage-Tests%testClassWithUnknownSlotsWithMessagestestSetAndRemoveMovieDirectortestRaisedToInteger&testAsNumberNegatedWithoutDecimalPoint*testAddSecondElementAfterOpenAddsToAdaptertestExampleSimpleBlockLocaltestInsettingByNumberShouldWork testTagOftestAllAvailablePostOrder&testArchiveWithThousandFilesShouldWorkMonticelloMocksFonts-Abstractselect: lightnesstestAsPackageIfAbsenttestEqualBlocktestNoRemoteBlockReturntestNotUsedArgument%testHasNonDefaultArguments_nonDefaulttest32bitConversion testLimit testBalancedtestAsFormAtScaleisClosePunctuation:>testVerifyPreconditionWhenRemoveLocallyDefinedInstanceVariabletestWithWithWithtestOneElementContainstestDoItContextReadGlobal'testRemovingAnEmptyNonLeafClassReparenttestDefaultResolvetestEnsureProtocol testExample01testAbsolutePrintStringtestNextBetweenAndsplitOn:testRemoveStaleValuesvaluesGraphics-Display ObjectstestToDoWithTempInBlock%testCreateAndUseDynamicCompilerPlugintestSixtyFourBitRegisterAnd!testNoChangeInSharedPoolsDetected)testLegacyCalloutShouldSendStringArgument)testRelativeFromStringNormalizationParenttestGettingRedefiningInstance8testBeginsWithFilterReturnsValidResultsWithTheSameFilter testBlue8testFileSystemtestTraitAdditionpieces'testShouldKeepHeadReferenceAfterRefreshtestRemotePorttestSwitchSlotsAndMigratetestStandardCommenttestInstallSourceFilesFailtestShowPresenterShowsWidget:testResolveInstanceVariableShouldSetInstanceVariableLoaderleftSizetestDangerousClassesEnablingtestValueWithPossibleArgumenttestAddTextPresenterDecorator"Collections-DoubleLinkedList-Tests0testSelectPresenterItemSetsSelectedIndexInWidgettestProtocolOfRemovedMethodtestRemovingMethods#testSplitOrderedCollectionOnElement3testExplicitRequirementInClassAlwaysTakesPrecedencetestAddPackagetestJumpAheadToIftestParallelAnimationCreation*testInitializedClassVariableReadReflective*testNotAffectedByChangeOfNotAbstractMethod testEscapetestGettingEnvironmentMCGitBasedNetworkRepository testStdouttestIfNotNil1ArgWithStatementtestSplitClass includesKey:isClosePunctuation testAsNumberWithoutDecimalPoint2testNoCoveragetestLiteralBoolean(testBackWindowsAreFindWhenUsingSubstring+testBlockParameterWhenTheLineWillBeTooLong2 dayOfMonthRefactoring-CoretestBasicCommandlineHandlertestRowSpanRowNotHomogeneoustestColumnSpanColumnHomogeneous testRedArea%testRawParametersWithNotStringAtValuetestClassNameMustBeSymboltestIntersectionsWithPointtestOccurrencesOftestBuildReturnHeuristic testIsObtusetestCallWithObjectCreation testSubtrees/testNegatedFilterIsNotNarrowThanCaseInsensitive printPathOn: testTUsestestWithobjecttestRedefiningSuperclassSystem-FinalizationtestSelectedMethod%testFailurePullUpWithInvalidSuperSendtestChangingFormatKeepsMethodtestBuildVariableHeuristictestAllMissingtestArgumentIsFormatedtestReadingFromContext oldObjecttestInvalidZipCrc,testColumnNotHomogeneousPairedRowsAndColumnstestLiteralIsInLiteralFrame#testDataMatrixArrayShouldNotBeEmptywithIndexCollect: testPrimNewtestJumpBackTomin:#testObsoleteClassIsRemovedFromUsersNewTools-Scopes-Tests traitSourcetestClassesWithTraitsMonthtestDecodeSoftLinebreakCRLFtestLabeledOuterShapes04testEnumIncludes.testAddParameterThatReferencesInstanceVariable put:onStream: testNoShadowedVariablesInMethodstestDisabledHaltIsDisabledtestAddIdenticalElements"testNestedBlocksRemoteInBlockCase3testIsImmediateObject$testHavingASlotAlreadyInTheHierarchy split:do: newFromArray:Commander-Activators-TextView asFourCodeRoassal-Interaction*testWithoutClassesRemovesClassesFromSendertestKernelDensityEstimation+testCannotCreateDictionaryRepositoryFromUrl Network-UUIDtestSimpleResumetestRemoveProtocolAnnouncement2+testJPGPPreviewerCanBeUsedOnParameterString'testTrueIfFalseIfTrueEvaluatesTrueBlock3testDuplicatedInstanceVariableInSuperclassMetaclasstestBandsMargin1testLogLocatorNumberOfTicksIsOkStartingAtNegative-testSingleLevelListWithStrangelyNumberedItemsprintShowingDecimalPlaces:testAssociationAtIfPresenttestWithoutExtensiontestCompileInMetaclasstestInlineEmptyComponentMethodwriteStreamDo:testBenchForExceptiontestIncludeAssociationtestPrintString_oneParamtestPushThisProcesstestNextOrNilSuchThattestClassEnvironmenttestDrawingWayOutside2#testOpenWidgetPresenterAppliesStylemiddletestExampleSelfReceivertestUrlObjectInUrlBlocks/testUnhandledExceptionShouldAllowToCatchWarningtestDotestModelsSize%testCastedTypedConstantIntegerHasTypetestReceiverWithGCZnServertoptest2 testFigure1testStepSendPopsArgumentsAndPushesResultBytecodesyear:month:day:testReciprocalModulotestInitializetestBasicWithCallbacks testCeiling7testRedundantBehaviorRepackagedChangeWithAbsentBehaviortestRejectEmptytestPrintingItalicLtestRemoveClassUnregisterTheClassExtensionMethodsFromTheCorrespondingPackagetestInt8testTallySendstestPlainExcursion'testRemovingMethodsFromDifferentClassestestSchedulerTerminationtestGetMedianOfOddDatasetSizeReflectivity-Examples'MonticelloFileTree-FileSystem-UtilitiestestValidTraitComposition nextToLast&testCannotDeployFailureTwiceIntoFuturetestAddSelectedComposite%testMergeWithFontRemovePredefinedFont testNesting$testFutureExecutesInNewProcessRunner4testFalseIfFalseReturnsBlockValueWithTempInsideBlock testSkipWithtestRemoveMethodInClasstestAllDependentPackagestestBuilderSharedVariablespiecesCutWhere: testAtWrapPut Slot-TeststestUndeclaredtestVariableByteClassIsBytesDtestIsAffectedByChangeOfMethodOfTargetClassWhichOverridesAbstractOnetestStepOverComputedReturntestShiftOneLeftThenRight+testFindStClassProcessorTestAfterAddingTesttestLinkBoldAPIToAccessTextout.testSchedulingSamePriorityFirstComeFirstServed testLowBittestAPI testWatchVariablesWritesInObjectfromStringWithComments:testChangingRenamedSlottestCreateFromStringabcdtestCananonicalizetestExternalLink3testPackageOfMethodFromTraitsAfterCreationOverriden+testLayoutChangeShouldAnnounceClassModified secondArgtestOrganizationDefinitiontestRealizeClass testNoEventstestModifyingClassSideInstancestestChooseDirectorysixthtestCopyNotSame7testCreateNewPackageWithConflictRaisesConflictExceptiontestOnceBehaviortestDefinitionOfTraitWithSlotstestParseFieldsStructure testReversed"testRenameMethodOnlyInSomePackagestestParseLineWithOneCharactertestTraitNoSlotsNoUsereject:thenDo: testBitClear-testAreDifferentForDifferentAnnotationClassestestIndentsForKeywords1#testRetainBlankLinesBeforeComments3testTailCompressedZerosToBytestestNewWindowDefaultstestMethod3forMocktestExpandedMetaclassWithTrait testNextOrNiltestCreateScatterPlot testGreen16testSlowFactorialtestDirectAnnouncementtestConvertFromInteger,testScrollUpToPreviousIndexScrollsTopToIndex'testCriticizeFinalDotIsEnabledByDefaulttestReplaceWithSpaces2System-CommandLinetestInstallSimplePoint2testUnmatchedBlockBracket testEqualitytestTraitMethodPackage9testHeuristicBuilderForSingleHeuristicLastIsNullHeuristic Text-Core!testExampleTempNamedPutTempVectortestAllUnresolved testFromErrorSourceFileArraytestRawsWithMonospace testByteAt%testAnnotatedBlockWithListParserLogictestAnEmptyRectangleHasNoArea$testBoldWrappedWithAccessAPIElementstestCullCullCull(testAllowDebugForbiddenBrokenAnnotations aColorHextestRemoveKeys%testPresenterPlaceholderIsSetInWidgettestSmallIntegerLayouttestRangeEncoding%testContextSelectorForBuilderSelector with:with: AsciiCharsettestUnclosedBoldkktestEscapeEncode testExamplecontainsPoint:testLiteralVariableGlobaletestFileOutTraittestClassVariableInModel,testFalseIfTrueIfFalseReturnsFalseBlockValueSpec2-Code-CommandstestCompileWithEnvironment dividend: testBytecodetestDeleteHistoryFromNode milliSeconds:testAtIfAbsenttestNewFromArraytestIncludeSelectorOfMetaClasstestScaleExtension(Calypso-SystemPlugins-Undeclared-Queriestest0FixtureOccurrencesTesttestRemovedPackagesIncludestestDoesNotUnderstand%testModelPushDownToMultipleSubclassesisEnclosingMark:firsttestJpegWriteReadUsingFilestestBoundaryContainsWhichOftestCompileInClassifiedtestIsUnsentMessage$testStopServiceStopsUnderlyingWorker testUpdateWhenLocalMethodRemovedtestTan/testNextPcAnswerNextBytecodePcInCaseOfExtensiontestDefinitionOfClassSideTraittestConditionstestFlatCollect3testBeRecursivelyWritableObjectexampleLiteralCharacterRandomtestSimultaneousModificationtestBuildSequenceHeuristictestAccessibleRealValues*testFutureCollectFailsOnFailingMapFunctionnumberOfDigitsInBase:#testLiteralReturnsAlwaysSameLiteral>testPushDownMethodDriverWhenAbstractClassExpectBreakingChanges testMath2testNewTraitCompositiontestHandleEventFrom$testHasBindingThatBeginsWithClassVartestSize~=testAssociationsSelectBtestNotAffectedByChangeOfSubclassMethodWhichNotOverridesSuperclassRing-Core-Tests testSizeSizeTtestWrittenAfterClosedOver testInBlockTempArgumentShadowingtestRendering01testGpsExample1testColumnHasIconWithSorting testIsMorph isExtension testMerge3 reverseDo:testNotchBasictestStubPackagetestLinesOfCodeMultilineComment(testDefinitionOfTraitUsingTraitWithSlotsSystem-Localization-TeststestKeyAtIndexIfAbsent"testMutateByteArrayUsingFloatAtPut testLeavestestDottedRepresentationErrorstestClassWithInheritedSlotstestRadio2StartsSelected%testWordCannotExtendPointerWithFieldstestSplitStringOnChartestDoubleClickFromMorphtestDoItRequestorShadow testInvert/testTrueIfTrueEvaluateBlockWithTempOutsideBlocktestAddMethodCommentTransformBaselineOfMenuRegistration testClasstestRemoveAtNotPresent testSuchThat testZero1 testAddingSpecialSlotToClassSide testIfExiststestTwoViolinPlotsClustered LGitLibrarytestImplicitConversionFromClasstestMessageToInstanceOftestNoUtilsMethods3testConvertingWithoutBasisObjectsWhenSomeIsNotExist Athens-Cairo atAll:put:&test0FixtureDictionaryIncludesIdentity*Calypso-SystemPlugins-Reflectivity-Browser&testStoreAndPopLiteralVariableBytecodeSystem-Time-TestsbadAnnotationsasSymboltestANDtestMultiplyByNumberaBlocktestIsInstalledtestIsLowercasetestAtAtIfAbsenttestWatchTwice lastBlanktestRemoteAddressoptestDeleteAllWindowtestFindThisPackagetestReferenceDependenciesFromtestCopyAfterEmptytestAddInstanceVariabletestComplexSlotsClasstestMathBlockWithArguments testRawFormattestWriteTwice testCaseOfSUnit-UI!testEnsureDeleteNonEmptyDirectorySessionAccessModeResolvertestReverseWithDotestUTF16EncoderLittleEndiantestContainsPoint#testClassAdditionWithPackageChanged"testShouldAcceptFloatWithMaxDigitstestEnsureNoSpacetestExpandedEmptyLayoutClasstestFailureOverriden==testSumNumberItemsWithoutBlock;testMoveToNodeKeepsSameStateAndPushesCorrectElementsOnStack1testChangingOtherPriorityLowerDuringSemaphoreWaittestCreateNilSubclasstestRemovePropertyaa:new:streamContents:testPerformWithArgsSmallFrame%humanReadableByteSizeStringPrecision:testSemaphoreTimeout0testHasEqualElementsOfIdenticalCollectionObjectsstring1/testLazilyComputeChildrenDoesNotComputeChildrenfade:#testConvertWindowMouseEventPosition1testDraggingSeveralTimesModifiesValueSeveralTimes.testFixedLocatorDataIsOkWithCollectionTooLargetestCqsortWithByteArray0testLinesOfCodeMultilineCommentWithoutWhitespaceblack+testSearchingInvalidTextDoesNotReturnResulttestNavigation+testSubscribeBlockWithoutParametersIsCalled$testExtractToTemporaryWithDuplicatestestAncestorMerge;testChangingPcKeepsSameStateAndPushesCorrectElementsOnStack testIconNametestFloatTruncatedtestNotLoadedClassMethodtestComposeStackTest*testOrdersACollectionOfClassesBySuperclass"testUndeclaredReparationWithGlobaltestBasicDebug$testSearchingSaIncludesSaveAndSaveAs-testLogLocatorNumberOfTicksIsOkStartingAtZero0testTraitedClassSubclassHasEmptyTraitCompositiontestCollectAsWithoutParenthesistestCallWithAllConstParametertestInstallExceptionorigin'testFailedAssertionContextInSenderChainBaselineOfEqualstestWithAssignmenttestParseAsPointer;testIteratorOnACollectionWithTwoCollectReturnsCorrectValuestestValueWithReceiverArguments0Calypso-SystemPlugins-ClassScripts-Queries-Tests0testVeryDeepCopyMethodNeedsToBeInCopyingProtocoltestBuilderWithPackagev234znak:x43:v2testClassSlots#testInputFileOnOneLineWithJunkAfterSTONtalliestestFillingWithTwoSameClasses2testMergingTwoStylesWithASameClassHasLeftOnlyClassexampleLiteralBoxedFloat ifNotNil:'testLiteralsEvenTheOnesInTheInnerBlockstestWhenActivatedDo*testTwoDifferentWordsStartingWithLowerCase2testCreateDynamicCompilerPluginWithDefaultPriority testMessages testIsDigittestReadComputedSlotReflectivefromRgbTriplet: testReject howManyMatch: Math-Operations-Extensions-TestsrangetestAllReferencesToDoBaselineOfMetacelloargsworkingDirectorytestShortCallouttestCopyWithout9testWorkerProcessDiesAfterWorkerAndAllFuturesAreCollected&test32BitTranslucentPixelValueKeepsRGB argumentCounttestReshapeClassWithClassSlottestRevertingRedefinedInstancemonthtestIfNotNilIfNil0ArgtestisPoolVariabletestFailureBadClasshex$testDefinitionOfNormalClassWithSlots testStepUntiltestEmptyTraittestChainBehaviorResetChain!testNoEquivalentSuperclassMethodstestQuo!testEmptyCompositionManagesTEmpty testCleaning testIsPrime3testAfterIfAbsenttestUTF8EncoderByteCounttestNodeisUnary!testFileOutMultipleMethodAddition,testFutureOnDoFailsOnFailingExceptionHandler%testIfSingleRadioButtonStartsSelected testMatches testAtAll+Calypso-SystemQueries-Tests-P1WithHierarchytestMoveWithoutSelfReference&testSmartCharacterWithEventSelfClosingtestMoveMethodFromExtensionToClassicProtocolAnnounceRepackagedtestPopupSimple testNumArgstestBasicProxyReadOnlytestIsModifierSymbol testTraditionalBinaryPrecedence3testPrintString_EmptytestCoreMethodModifiedtestFindOcurrencesInClass testSizeReturnsNumberOfSelectors testHasModel!testWorldMenuHasHelpForAllEntriestestCopyCreatesNewObject/testExecutionOfWrongFFIMethodShouldRaiseAnError testPatchquoteBaselineOfKeymappingtestDefinedSelectorstestCreateEphemeronClassWithAlltestLinkAPIToAccessText*testNoNewLineForBeginingOfATooLongArgument stringStream'testKeepBlockInMessageNotMultilineSpace-testFailurePullUpWithMethodThatCannotBePullUpBaselineOfDependencyAnalyzertestReverseDoEmptytestConvertingWithNewScopeBasis(testCreatingEmptyTraitHasDefaultElements arrowDown testProtocolsBaselineOfUnifiedFFIAtestSpaceInsidetestKeyDownFromMorph!testManyPresentersShowManyWidgetstestPngWriteReadUsingFilestestisZipArchivetestUnsubscribe testWithRB6RtestRedefinedTraitedClassSubclassClassTraitCompositionIncludesTraitedMetaclassAPI2testAliasesCollectiontestIndirectTraitSubclassingtestMonospaceUnevaluatedsXtestMaxLengthIsSetInWidget testAccessingTempsVectorInBlock3selectEveryFirsttestIsEnclosingMarktest0IndexAccessingTest5testRemoveExtensionMethodRemovesExtensionsFromPackagetestVariableByteSubclassSmallDictionarytestClassWithInstanceSideImpactPitestInferiorOrEqualstestErrorCodeNotFoundtestNoNewLinesAfterSignatureRoassal-Pharo12-testExtractToTemporaryForLastStatementInBlock badTokens/testNewProcessTaskRunnerRunsNeverInLocalProcessNewTools-Finder-Tests pieceBlockmax:+testLinesOfCodeEmptyMethodWithNewlineAndTab testReadSlottestRedefinitionKeepsSlots testSumDoubletestItalicWrappedElementsTool-ImageCleaner-Tests noise:y:z:)testSindarinSessionAsSindarinDebugSessiontestPerformMatching,testUndeclaredReparationWithInstanceVariabletestAllInstructionstestIsExecutedFromMultipleScope ffiLibraryHiedra"testTraitIfClassTraitAlreadyExiststestIgnoredMethodWrongProtocolMorphic-Widgets-Scrollingand:testLoadacceptUnknownClasses:testClassCommenttestProtocolEnvironmenttestAllStoredSettingstestImportAMethodtestIsOfflineTrueNotFoundtestIsContextPostMortem-testFutureSuccessCallbackExecutesInNewProcess0testBuildingClassesWithSlotsClassifiesItsMethodstestCompiledBlockSourceNodetestArrayEvaluateWithBindingstestUndefinedLastUnarytestAddTemporaryRefactoring*testMathBlockWithParametersAndLatexCommenttestDeactivatedCheckboxPresenterStartsDeactivatedCheckboxMorphtestNaNisLiteral,testFlatStructureLayoutSysVAMD64PostProcess2testAssignmentValuetestWidenOnBrackets isCasedLetter,testSetPackageOfClassAnnounceClassRepackaged&test0FixtureDictionaryAssocitionAccess OSEnvironmenttestNewBehaviortestValidateNewSelectortestNewSubclasstestSkipDoesNotSkipReturntestIsUndefinedJtestSubstringFilterDoesNotFetchTwiceIfTheFilterIsARefinementOfPreviousTexttestExampleNestedBlockScoping testFlipped1testCanRemoveUnreferencedClassWithFullEnvironmentBaselineOfSystemCommandsremoveAllSuchThat:testSumUnsignedShort testSeparatortestAccessingTempsVectorInBlockRefactoring-Core-TestseStrmaxValuetestResumeAfterBCRtestSwapAdjacentEndtestSelectorsWithExplicitOrigintestModifyLabel!testGoOpenSmalltalkSyntaxTutorialtestNA#testEscapeCharacterInNestedLinkNameaColor)testChangePlaceholderTextUpdatesPresenter*testReadIntoStartingAtCountFromStreamAtEndtestWithClassSlotstestFixedLocatorDataIsOktestPackageOrganizer#testMultipleDocCommentsInOneComment4testBrowseMethodViaImplementorActuallyBrowseTheClass2testMarshallingSmalltalkStringReturnValueWithAlias testIsReflextestWithPackagestestThereAreTwoSettings'testTypedPointerVariableArgumentHasNametestClassUsingStatefulTraitstestEndGoesToEndOfLine testPassingByParameterAStructInCtestToolsToKeepWhenManyContexttestExpandPathtestMonospacesWithBackQuotetestColorsFileOutIntestExactNthRoot(testBreakDebugPointOnClassVariableAccesstestContinuationExample1testSelectWord$testSettingNodeIdentifierForRootNode testInfinity2testDependentPackagesSizeCodeImport-TeststestOpenPresenterIsDisplayedtestMathBackslashyear2testResolveConstantSelfStringInStrictResolverFailsgreen8testUncorrectJSONMetaDataProducesDictionaryWithContents2testFromTwoMethods"testExtraIndentationWhenMultiline2testFindCloseEnoughMethod,testUnhandledExceptionShouldAllowToCatchHalttestDependantPackages1testChangingOtherPriorityRaiseDuringSemaphoreWaittestNot,testNotNilIfNotNilWithArgumentEvaluatesBlockGeneral-Rules-TeststestKeysSortedSafelyfalseAlternativeBlocktestAsCommaStringEmptytestNewScopeFromASetOfClassestestComparisonWithSimilarResulttestStepIntoReturnSelfMethodAtestCaseInsensitiveFilterIsNotNarrowWhenTheInternalAreNotNarrowedtestNoArgumentstestWeakClassIsWeak#testGettingExistingClassNameBindingtestBlocksShareOuterVariables badComments&testDebugSessionAsSindarinDebugSessiontestDoublePassOutertestDynamicVariable!testStandardMethodInExistingClass7testRecompilingTraitMethodRecompilesTheMethodInTheUserstestInvertRange test0FixtureDictionaryAddingTesttestRenameClassVariabletestKeyStrokeWithMaxLengthtestBigReceiverInexactSqrtNewTools-Debugger2testChangeDeactivatedAfterOpenCheckboxDectivatesIt testAddAftertestProtocolRemoval$testAddElementAfterOpenAddsToAdaptertestComposePromptWithtestRemoveSimpleSenderOfMessageNumericInterpolator&testMissingArgumentAfterABinaryMessagetestCanBeEnumeratedForGivenUser)testExampleTempNamedTempVectorNestedBlocktestLiteralFloat'testCanBeEnumeratedForGivenClassAndUser.testInitializationAllCheckBoxDictionarySetTruetestDecreasedValueFromtestSharedPoolOfVarNamedtestCreationFromString36With0exampleLiteralByteArrayRoassal-ShapesLtestBreakDebugPointOnVariableDetectsNewVariableAccessAfterCompilingNewMethodtestCenteredAttachPointtestMoveClassToTagtestWatchVariableReadsInObjecttestPositionErrorstestExtensionDependenciessplittertestVisitHttpLinktestSignedInt32+testForbidCreationOnScopeWithoutEnvironmenttestMigrateTestSlottestHandlingWithExclusiontestSubClassWithTraitsAfterModificationOfParentSharedvariables$testStepThroughInAMethodWithoutErrortestLastShouldGoToThirdLessonbyteSizebetween: lerp:a:b:testSelectionExecutesBlockSettings-PolymorphtestStructWithArraytestInstallFromStreamtestThreeRemoveFirst0testPackageExtensionsStartsWithProperPackageNametestTransitionAnimationCreation*initializeHue:saturation:brightness:alpha:testExpressionNoAssociation2testKeywordOnMultipleLine BaselineOfIDEtestAddPresenterAddsWidgettestContainsLocator testUsersOf%testNoOutgoingDependenciesAfterTarjan&testDefaultImageDoesNotStoreAnySettingtestSelectSourceFiles#testSubstringSearchNonExistingClasstestRecipientListtestMustInclude04testGroupedUndo2!testGettingAllRedefiningInstances!testProperFileInOutProtocolIsUsed"testOpenAllOnNonExistantFontFamily&testPackageNamedWithoutMatchingPackagetestByteArrayParenthesistestCopyForBehaviorDefinitiontestIsConnectorPunctuationBtestRenameClassUpdateClassExtensionSelectorsInTheExtendingPackagestestGettingFreshInstanceCtestCollectionWithSingleManyElementsReturnsTheRequestedInCollectionNewTools-Debugger-Extensions:testClassWithUndefinedSuperclassNameHasUndefinedSuperclasstestAllSharedPoolstestMethodsWritingSlottestWatchVariableWritesInObjecttestFlushOtherEndClosed$testSearchingVeDoesNotIncludeIcebergtestMethodDefinitiontestFailureNoMoveDefinitiontestShiftDownShortStacktestAsClassVariableCollectionSecondsInMinutetestOpenAllOnUnloadedFontFamilypermutationsDo:aClasstestAddArgument sortedCountstestIsCashingResourcesTrue classNameKey KeyboardKeytestImportAClassComment ascending%testStoredCredentialsUsesMostSpecific1testUndoOperationAddsTheChangeToTheRedoCollectiontestValueWithExitContinuetestSelectableIndexAbovetestHasContext,testFailureModelMetaclassAlreadyExistingNametestNotifyBreakpointAddedtestRawWitoutClosuretestReadStreamDoNotFound!testClassNameWithInvalidCharactertestStringEncoding streamSpeciesf testANewLineCreatesANewParagraphmessagetestSharedPoolsCollectiontestBinaryOneArgumentPerLine2isSortedtestCompletionOnSingleLettertestResumableOuter!testReadWriteWeakClassVarCompiledtestMethodsReadingSlot ProtoObjecttestArchitectureProvidedtestSimpleOrdering(testClassDescriptionResolvablePropertiesAtestIsAffectedByChangeOfSuperclassMethodWhichIsAlreadyImplementedtestNewLineBetweenStatementtestAllInstancesstoreStringBase:length:padded:Microdown-RichTextPresenter testBitLogictestRenameClassVarInSharedPooltestNewVariableBreakpointItemtestUntypedSelfArgumentIsSelftestNodeCoverageBtestRedefinedTraitedClassSubclassHasEmptyClassTraitCompositionAPI2 nextIndextestArrayBindingsWriteGlobalstestRenameProtocolAsWithNil3testUrlObjectInUrlBlocks2(testDemoteToRPackageNamedExistingPackage)testDefaultCompletionIsNilIfNoGlobalClass"testSupplySameAnswerToAllQuestionsSpec2-Adapters-Morphic-TeststestIsAssignmenttestPutAllNegativetestClassRemovedallSentMessages ThreadedFFI testAddItem1testAddExtensionProtocolFileSystem-Disk-TeststestRelativeTo>testTraitWithComplexSlotUsedInOtherSlotWithoutTraitComposition testNilUUIDBaselineOfCommander2testUnsignedShorttestOrdinalScaleRangeRoundBands7testMandatoryEncodingWithSpecifiedEncodingShouldNotFailtestRemoveLastNotPresenttestRemoveClassUsingEnvironmenttestRemovingAClassWithExtensionNewTools-DocumentBrowsertestWhenDeclaringMethodIsBroken8testUncorrectJSONMetaDataProducesDictionaryWithContents3testAccessIsNotDefined+testCreateTraitUsingAnotherTraitComposition rename:to:in:.testClassCreationToolIsValidWhenPackageContexttestHeaderLongElementstestSystemIntegrityelementAndIndexBlocktestConvertingToDoItVariabletestPossiblyUsingClassesBaselineOfSUnit newObjecttestNullEncoder+testModelInlineMethodWithSameVariableNames2 lineEnding.testPushDownMethodThatReferencesPoolDictionary testCollect2testNaN4testIdenticalModificationtestExpressionNoAssociationtestLocalRemoveRemoteModify$testFindOcurrencesWithArgInHierarchytestGForceInria subtractDays:#testWorkerPoolDoesNotExceedPoolSize testWithWithtestRemoveClassNamedtestExampleSimpleBlockiVartestMutateVariableObject"testDeleteAllWindowToLeftOfAWindowdecimalDigitAt:CtestBuildSelectorStringWithPermuteMapAndNewArgumentsWhenNoArgumentstestLocalAddressim4testCoverageResultIsAnInstanceOfDTTestCoverageResulttestClassEnumeration2testUtf8CalloutShouldReturnDecodeUtf8EncodedStringNewTools-SpottertestSliderMouseUpReleaseDrag%testClassRemovalWithClassAlreadyAddedSindarin-TeststestAnchorReferenceUnevaluatedFLNegative8SmallIntegerCluster  *(bFLHookPrimitiveClusterN`"W:(FLHookPrimitiveClusterQ%?333333@??\(\7tJM7KƧ@N?陙@f |3!@ Q@lp@lVϪ .1?@Ul@aaao@ (\)?@L@@Yfffff?o[o\(\@$fff]`@l"h ԕ?XbM?گ%?گ%?ٙ@2t@$=p =?@@$?4֡a?mR$/@lp@$@ 333333?@?zG{@?ܒ5?ə@n@i@&P@$ffffff@ ?@$vN@7iBĿ?PbM?ڹY@ !n?.B9@@7tJM@7KƧ?tzG{?zQ@? 333333@^?yc@Y@&P{`@v@ Q?Q_?ffffff@ .1FLHookPrimitiveClusterFLNegative32SmallIntegerClusterFLPositive16SmallIntegerClustergZ, mq4yK'Sj YD p7cNzV(m0uG # 6O!fB@H3 F_J" v+{9RPi,qCwb></F  r Nze(m?G^: fd}+ lWnJva $i;CZ6 Ib4y' : jF Yr] 'e7|?kV2,^0 u#O{B Y4a3_x; 9R .Z ,q> QjU-]/ t7Vc|N*VmG#:Q}Y+p3 xJ &vR$iC6MyU'ltF"rN  e(A ?2 I! uQ dh+pBJa=;dT.ZEqMd'l>FD]9 e 7|* =m0I \`#h:  B nY5a3x&RiE\d6 {>U1 D]/ t"  5NA mX`2w:Q- @Y+Wp  _  1J &$= T\. o  s6{M)U'l "9eP|?X*o2wI%u 8h  W  )B5aL$xT Rk.sE!d@1]H tP |g* z/oAI`<h:-YDSpLc&Rk=iE \ 8 d6{>)  <Ul /H [t_ "*g9~A X 4`2Rw:%QDp[Jc5 z=T0\. s!M"@lW_1 v e~P,X*oI%<hSB[- r5 zL(Tkܫ>E!8dO{W)nvH$ 7P"g  (4`K#wS  j-rD Lc?=0\G sO{fn@ H_; g9~,XCKwbj< D [ 7 c 5z=(kG  Zs ^!f8  }@W3_ v$PCZb4`y<:S /[ - Yr   aL?kV ^0   \u 8}6O+W )Un1H $;gR~FLHookPrimitiveCluster'k/1111Remove oldObject from the receiver's elements. Answer oldObject unless no element is equal to oldObject, in which case, raise an error. ArrayedCollections cannot respond to this message.00000000000000!('abc' repeat: 3) >>> 'abcabcabc'oReturns a string representation of the receiver in base 16 in a way that executing it will return the receiver.7(0@0 isInsideRectangle: (0@0 corner: 100@100)) >>> true3412a := a. { [ :a }. a := a5ifFalse: alternativeBlock "Answer the value of alternativeBlock. Execution does not actually reach here because the expression is compiled in-line." "(false ifFalse: [ 'This statement is false!' ]) >>> 'This statement is false!'" ^alternativeBlock value1@|s| s:=0. #(11 22 33) select: #odd thenDo: [:x|s:=s+x]. s >>> 44242abc20 <1p>: <2p>(Tests-unix-64-ClassParser-Tests-Test.xml12315LIf the receiver is false (i.e., the condition is false), then the value is the false alternative, which is nil. Otherwise answer the result of evaluating the argument, alternativeBlock. Create an error notification if the receiver is nonBoolean. Execution does not actually reach here because the expression is compiled in-line.(#(1 3 5 7 11 15 23) findBinaryIndex: [ :arg | 25 - arg ] ifNone: [ :a :b | 'over index: ', a printString ]) >>> 'over index: 7' 4260.1c3/foo/barfour10+Convert an OrderedCollection into an Array.2 3333304444440:00:00:00.0000000012820 #(#"A"##"B")2""" 00 """ n """ n """ 0 """0vector0:('<1?success:error>' expandMacrosWith: true) >>> 'success'10vector00002345a || 4.011Uppp ^ 0 :BB :BB :BB :BB :BB :BB :BB :BB :BB :BBB :BBB :BBB :BBB :BBB :BBB :BBB | bb 01;Answer a Point that is the product of the receiver and arg.darker0DDD 000EEE090FFF0AAA0GGG0BBBBBBCBBBBBB0JJJ00 KKK20fourth "Answer the fourth element of the receiver. Raise an error if there are not enough elements." "#(a b c d e f g h ) fourth >>> #d" ^ self at: 4c3 234WhoopiehumanReadableByteSizeString "Return the receiver as a string with the adequate file size identified, e.g. '50 KB'. The difference with humanReadableByteSISizeString is that the current one counts by 1024 and not 1000." "(1000 * 1000 * 1000) humanReadableByteSizeString >>> '953.67 MB'" "(1000 * 1000 * 1000) humanReadableSISizeString >>> '1.00 GB'" "(1024 * 1024 * 1024) humanReadableByteSizeString >>> '1.00 GB'" ^ self humanReadableByteSizeStringPrecision: 2233021516rCL(String streamContents: [ :s | 'Foo''Bar' storeOn: s ]) >>> '''Foo''''Bar'''surroundString: aString withCharacter: aCharacter "Returns a new string with contents equals to aString surrounded by aCharacter. Escapes all occurrences of aCharacter within aString by doubling them." "(RubTextEditor new surroundString: 'a' withCharacter: $') >>> '''a'''" "(RubTextEditor new surroundString: 'a''b' withCharacter: $') >>> '''a''''b'''" | result stream | result := WriteStream with: ''. stream := ReadStream on: aString string. result nextPut: aCharacter. [ stream atEnd ] whileFalse: [ result nextPutAll: (stream upTo: aCharacter). stream peekBack = aCharacter ifTrue: [result nextPut: aCharacter]. result nextPut: aCharacter.]. stream peekBack = aCharacter ifTrue: [result nextPut: aCharacter]. ^result contentsdo 0({3. 9. 1} sort: [:a :b | a >= b ]) >>> #(9 3 1)5this string will be trimmed [:a|| |a]ABC2101((2@2) * 200) >>> (400@400)xa22dn(Array streamContents: [:stream | #(1 2 3) with: #(4 5 6) do: [:a :b | stream nextPut: (a + b)]]) >>> #(5 7 9)3$Print the receiver showing precisely the given number of places desired. If placesDesired is positive, a decimal point and that many digits after the decimal point will always be shown. If placesDesired is zero, a whole number will be shown, without a decimal point. Here are some examples:LRemove each element from the receiver and leave it empty. ArrayedCollections cannot respond to this message. There are two good reasons why a subclass should override this message: 1) the subclass does not support being modified while being iterated 2) the subclass provides a much faster way than iterating through each elementgroupByRuns: aBlock "Answer a new collection of the same species as the receiver with elements being collections (of the receiver species) containing those elements of the receiver for which the given block consecutively evaluates to the same object." "(#(1 2 3 4 4 1 2 3 5 6 ) groupByRuns: [ :each | each = 4]) >>> #(#(1 2 3) #(4 4) #(1 2 3 5 6))" "(#(1 2 3 4 1 2 3 4 5 6 ) groupByRuns: [ :each | each = 4]) >>> #(#(1 2 3) #(4) #(1 2 3) #(4) #(5 6))" "((1 to: 12) groupByRuns: [ :each | (each \\ 3) = 0]) >>> #(#(1 2) #(3) #(4 5) #(6) #(7 8) #(9) #(10 11) #(12))" | str eStr r | str := Array new writeStream. r := nil. eStr := Array new writeStream. self do: [ :e | | t | (t := aBlock value: e) = r ifFalse: [ r := t. eStr isEmpty ifFalse: [ str nextPut: (eStr contents as: self species). eStr reset ] ]. eStr nextPut: e ]. eStr isEmpty ifFalse: [ str nextPut: (eStr contents as: self species) ]. ^ str contents as: self species190!foo: a ^ [ :a | a ] value: 10 + a/ "a" 1 "b" max: "c" 2 "d" ; "e" min: "f" 3 "g" kIf the receiver is not nil, pass it as argument to the ifNotNilBlock block. else execute the nilBlock block%({1@ -4. -10@1} sum: #abs) >>> (11@5)20Return a SortFunction around the receiver, where the receiver will be used as a unary message to send to both a and b during sorting, and then the result of said send will be collated in descending order using the <=> method.-3ninth "Answer the ninth element of the receiver. Raise an error if there are not enough elements." "#(a b c d e f g h i) ninth >>> #i" ^ self at: 9cc10022#() asCommaString >>> ''10(8 raisedTo: 2) >>> 6410000000000000000000M|s|s:=0. #(4 2 1) withIndexDo: [:e :i| s:=s + (e * (10 ** (i-1)))]. s >>> 124 withUnixLineEndings "Answer a new instance where all occurrences of CRLF and LF are substituted with LF." "(('asa' , String cr , 'asa') withUnixLineEndings at: 4) >>> Character lf" ^ self withLineEndings: String lfLiteral expected#( 1 #']' 2 #'}' 3 )nsrunningMax: aSubsetSize "Running max. See the comment of self >> #running:of: for more information." "(#(1 1 2 2 3 3) runningMax: 3) >>> {2 . 2 . 3 . 3}" ^ self running: [ :subset | subset max ] of: aSubsetSize2MReturn a color with the given r, g, and b components in the range [0.0..1.0].,Tests-unix-64-Kernel-Extended-Tests-Test.xml20S#[31 139 8 0 0 0 0 0 0 0 99 100 98 6 0 29 128 188 85 3 0 0 0] unzipped >>> #[1 2 3]1,#((1 5 1) (2 3 3) (4 7 2)) sum >>> #(7 15 6)3a, b, c40\(#(1 2 3 3 4 1 2 3 3 5 6) splitOn: #(3 3)) >>> #(#(1 2) #(4 1 2) #(5 6)) asOrderedCollectiondA13#(1 2 4) sumNumbers >>> 70 ^ n. n. ^ n 019 Assignment to read-only variableb35b;({'hel','lo'. 'world'} identityIncludes: 'hello') >>> false!('*baz' match: 'mobazo') >>>falsee2100a20hel4[ ^ 1. 2. ^ 3 ]MCreates an array with anObject followed by elements contained in aCollection.d0e23VifNotNil: ifNotNilBlock ifNil: nilBlock "If the receiver is not nil, pass it as argument to the ifNotNilBlock block. else execute the nilBlock block" "Might be compiled inline for speed, see RBMessageNode>>#isInlineIfNil" "(nil ifNotNil: [:o | o +3 ] ifNil: [42]) >>> 42" "(3 ifNotNil: [:o | o +3 ] ifNil: [42]) >>> 6" ^ nilBlock valued02AMan,APlan,ACanal,Panama45101.00 GBaXXb40.001*((30/3)@(2/2)) asFloatPoint >>> (10.0@1.0)-(Color fromString: 'orange') >>> Color orange190Tests-unix-64-HeuristicCompletion-Tests-Test.xmlp(Dictionary newFromKeys: #(#x #y) andValues: #(3 6)) >>> (Dictionary new at: #x put: 3; at: #y put: 6 ;yourself)122' ' isNotEmpty >>> truename4121003110vector0('In {1} you can escape \{ by prefixing it with \\' format: {'strings'}) >>> 'In strings you can escape { by prefixing it with \' 11I(#(1 2 3) bind: [ :first :second :third | first + second + third ]) >>> 66Collection size and block argument count do not match.2025 (#(1 -4 -10 1) sum: #abs) >>> 16atAll: indexArray "Answer a new collection like the receiver which contains all elements of the receiver at the indices of indexArray." "(#('one' 'two' 'three' 'four') atAll: #(3 2 4)) >>> #('three' 'two' 'four')" | newCollection | newCollection := self species ofSize: indexArray size. 1 to: indexArray size do: [:index | newCollection at: index put: (self at: (indexArray at: index))]. ^ newCollection0vector0G(#(a b a d a) lastIndexOfAnyOf: #(a b) startingAt: 1 ifAbsent: 7) >>> 1edfirst "Answer the first element of the receiver" "#(a b c d e f g h ) first >>> #a" ^ self at: 1053122JReturn the class of STON associations, Association, a system wide constant0vector0{1]2}(Evaluate the block with the first two (or more) elements of the receiver, then with the result of the first evaluation and the next element, and so on. Answer the result of the final evaluation. If the receiver is empty, raise an error. If the receiver has a single element, answer that element.9713310vector0 #hello#worldx-(10 to: 1 by: -2) sorted >>> (2 to: 10 by: 2)30WindexOf: anElement startingAt: start "Answer the index of the first occurrence of anElement after start within the receiver. If the receiver does not contain anElement, answer 0." "(#(a b c d e) indexOf: #c startingAt: 2) >>> 3" "(#(a b c d e) indexOf: #c startingAt: 4) >>> 0" ^self indexOf: anElement startingAt: start ifAbsent: 0c(#(1.9283901234902349 2.302949083493849) closeTo: #(1.9283901234902348 2.302949083493899)) >>> true#Tests-unix-64-Rubric-Tests-Test.xml32812a | 11$' isInitialQuote >>> false304320xz\|a|a:= Array new: 3. #(10 20 30) withIndexDo: [:e :i| a at: 4-i put: e+1]. a >>> #(31 21 11)20b113Class structural inspection - Class/Metaclass shift That is true!+Character arrowDown isControlOther >>> true9Tests-unix-64-Collections-DoubleLinkedList-Tests-Test.xml2aone4hello1fromStringWithComments: string "Parse and materialize the STON representation in string, skipping C-style comments" "(STON fromStringWithComments: 'Point[1,/*comment*/2]') >>> (1@2)" ^ self fromStreamWithComments: string readStreamg(STON toJsonString: { { #foo->1 } asDictionary. { #bar->2 } asDictionary }) >>> '[{"foo":1},{"bar":2}]'(#(11 22 33) before: 33) >>> 220122000011indexOfSubCollection: sub startingAt: start ifAbsent: exceptionBlock "Answer the index of the receiver's first element, such that that element equals the first element of sub, and the next elements equal the rest of the elements of sub. Begin the search at element start of the receiver. If no such match is found, answer the result of evaluating argument, exceptionBlock." "(#(a b c d e) indexOfSubCollection: #(c d) startingAt: 2 ifAbsent: 7) >>> 3" "(#(a b c d e) indexOfSubCollection: #(c d) startingAt: 4 ifAbsent: 7) >>> 7" | first index | sub isEmpty ifTrue: [^ exceptionBlock value]. first := sub first. start to: self size - sub size + 1 do: [:startIndex | (self at: startIndex) = first ifTrue: [index := 1. [(self at: startIndex+index-1) = (sub at: index)] whileTrue: [index = sub size ifTrue: [^startIndex]. index := index+1]]]. ^ exceptionBlock value-1.5160331asBit "convert myself to an Integer representing 1 for true and 0 for false" "($b > $c) asBit>>> 0" "true asBit >>> 1" "(#(true true false true) inject: 0 into: [ :sum :each | sum + each asBit]) >>> 3" self subclassResponsibilityCalculate the average of a collection, return a CollectionIsEmpty exception if the collection is empty. Look averageIfEmpty: aBlock11000((3 to: 9 by: 2) allSatisfy: #isPrime) >>> false3XXXXXXXX30K(#('one' 'two' 'three' 'four') atAll: #(3 2 4)) >>> #('three' 'two' 'four')1416r41G({#xa. #xc. #xz. #xb. #xy} sort: #last ascending) >>> #(xa xb xc xy xz)('abcdf' indexOf: $a) >>> 1if10X 206ppp ^ 0 | T | t n. 1 :B | b 1 ssssss nn s t 0 sssssd1b100@ nothing to doc1002helloyyyymmdd "Format the date in ISO 8601 standard like '2002-10-22' The result is of fixed size 10 characters long.." "(Date year: 2018 month: 9 day: 28) yyyymmdd >>> '2018-09-28'" ^ String new: 10 streamContents: [ :aStream | self printOn: aStream format: #(3 2 1 $- 1 1 2) ]0.0two 'abc' = 'abc' >>> true: 40 11200300445!""" 0 """ 1 """ n """ 1 """ 0 """542,(#(11 22 33) before: 22 ifAbsent: 55) >>> 11Oascending "Return a SortFunction around the receiver, where the receiver will be used as a unary message to send to both a and b during sorting, and then the result of said send will be collated in ascending order using the <=> method." "(#('abc' 'de' 'fghi') sorted: #size ascending) >>> #('de' 'abc' 'fghi')" ^self asSortFunction[ :a :b6Returns the instance of myself having aString as name.1+(#(a b c d e f g h ) first: 3) >>> #(a b c)*(100@200) reciprocal >>> ((1/100)@(1/200))30* arg "Answer a Point that is the product of the receiver and arg." "((2@2) * (100@200)) >>> (200@400)" "((2@2) * 200) >>> (400@400)" arg isPoint ifTrue: [^ (x * arg x) @ (y * arg y)]. ^ arg adaptToPoint: self andSend: #*fromCharacter: aCharacter ifNone: aBlock "For backwards compatibility mainly. Return the key that should correspond to some character. Handle normal ascii characters and special control keys only (enter, tab space...)" "(KeyboardKey fromCharacter: $a) >>> KeyboardKey A" ^ self keyFromCharacterTable at: aCharacter ifAbsent: [ self named: aCharacter asString asUppercase ifNone: aBlock ] (#(1 2) ifEmpty: [0]) >>> #(1 2)-233120223aNumber cannot be negative3de21Edetect: aBlock ifFound: foundBlock "Evaluate aBlock with each of the receiver's elements as the argument. If some element evaluates aBlock to true, then cull this element into foundBlock. If no element matches the criteria then do nothing. Always returns self to avoid misuse and a potential isNil check on the sender." "|s| (#(1 2) detect: [ :each | each even ] ifFound: [ :e | s:=e*10 ]). s >>> 20" "|s| (#(1 3) detect: [ :each | each even ] ifFound: [ :e | s:=e*10 ]). s >>> nil" self detect: aBlock ifFound: foundBlock ifNone: [ "Do nothing on purpose" ]|:a|$'3.123' isAllAlphaNumerics >>> falsecharlie1024o (Dictionary new at: #top at: #below1 put: 1; at: #top at: #below1 put: 2; at: #top at: #below1) >>> 2abc420RCount the number of characters in a substring that matches up in self and aString.7*Return collection printed as 'a, b and c' *Answer the middle element of the receiver.2100detect: aBlock ifNone: exceptionBlock "Evaluate aBlock with each of the receiver's elements as the argument. Answer the first element for which aBlock evaluates to true. If none evaluate to true, then evaluate the argument, exceptionBlock." "(#(1 2) detect: #even ifNone: [0]) >>> 2" "(#(1 3) detect: #even ifNone: [0]) >>> 0" "('Hello' detect: #isLowercase ifNone: [$X]) >>> $e" "('LOL' detect: #isLowercase ifNone: [$X]) >>> $X" ^ self detect: aBlock ifFound: [ :element | element ] ifNone: exceptionBlock00200?('hello world!' anySatisfy: [ :each | each isLetter ]) >>> trueasSet "Answer a Set whose elements are the unique elements of the receiver." "{1. 2} asSet = {2. 1} asSet >>> true" "{1. 2} asSet = {1. 2. 2} asSet >>> true" "{1. 2} asSet = {1. 2. 3} asSet >>> false" "{} asSet = Set new >>> true" ^ Set withAll: selfE(#(a b c d e) indexOfAnyOf: #(x y c) startingAt: 2 ifAbsent: 7) >>> 34##() asDictionary >>> Dictionary newLReturn a color for HTML color spec: #FFCCAA or white/black passed as string. between: foo*baz119300T#(2 3 4 'fred') asOrderedCollection reversed >>> #('fred' 4 3 2) asOrderedCollection00101x1tunescapeCharacter: aCharacter "Unescape an escaped string. Assume the string has all occurrences of aCharacter are escaped. That is, they are in pairs. This method returns a copy of the string replacing all pairs of aCharacter by a single appearance of it." "See `escapeCharacter:` for the opposite" "('''''' unescapeCharacter: $') >>> ''''" "('''' unescapeCharacter: $') >>> ''" | result stream | result := WriteStream with: ''. stream := ReadStream on: self. [ stream atEnd ] whileFalse: [ result nextPutAll: (stream upTo: aCharacter). stream peek ifNotNil: [result nextPut: stream next]]. ^result contentsyAnswer the number of digits printed out in base 10. Note that this only works for positive SmallIntegers up to 64-bits.30(#(1 3 5 7 11 15 23) findBinaryIndex: [ :arg | 11 - arg ] do: [ :found | found ] ifNone: [ :a :b | 'between: ', {a. b} printString ]) >>> 52IMPLEMENTATION NOTE: following algorithm is optimized in primitive only in case self and suffix are bytes like. Otherwise, if self or suffix are wide strings, then slow version with asLowercase convertation, (primitive is not correct for wide strings)d20001022033304550670880,Tests-unix-64-ClassAnnotation-Tests-Test.xml01 222213334444U(#(1 2 3) collect: [:each | each + 10 ] thenReject: [:each | each even]) >>> #(11 13)dUnreachable statement2000001100000220000033000004400000550000066000007700000880000099000000AAA000000BBB000000CCC000000DDD000000EEE000000FFF000000GGG0IIJJ510-overlappingPairsDo: aBlock "Emit overlapping pairs of my elements into aBlock" "(Array streamContents: [:stream | #(1 2 3 4) overlappingPairsDo: [:first :second| stream nextPut: (first + second)]]) >>> #(3 5 7)" 1 to: self size - 1 do: [:i | aBlock value: (self at: i) value: (self at: i + 1)]34('*foo*zort' match: 'afoodezortorfoo3zort') >>> true6n"""uuuu uuuuu uuu uuuu"""uuuuu"""uuuuuuuuuuu"""!777 00888000999000AAA000BBB00 CCC20abc-Tests-unix-64-ThreadedFFI-UFFI-Tests-Test.xml3-255112#Fast initialization with the items of a given array. This initializes elements faster that the generic withAll: or newFrom: methods. The main selling point is that dynamic arrays, like {1. 2. 3}, are really fast in Pharo. So other collections can be easily and efficiently initialized with `{1. 2. 3} asFoo` syntax. Important: Subclasses of Collection that redefine withAll: or newFrom: should also redefine this method either by having a proper implementation (specific to Arrays) or by calling the redefined versions of withAll:/newFrom:. a: foo2001040(1 -> 'one') key >>> 1110400 1 n n n 1 0 0010223501/(#(1 2 2 3 1 1 1) asBag occurrencesOf: 1) >>> 4isEnclosingMark "Return whether the receiver is ... one of these https://www.compart.com/en/unicode/category/Me" "$' isEnclosingMark >>> false" ^ self characterSet isEnclosingMark: self"#foo: keywordsStrict >>> #('foo:')-432768#(^1)2,""" n """ ssss """ n """ s """ n """ sss """ abd hello abd ${#a. #b. #z. #d} sort >>> #(a b d z)413nX?Answer whether the receiver is above and to the left of aPoint.256^ 241101true asBit >>> 1a0-(String streamContents: [:s | 'Pharo is cool' splitOn: Character space indicesDo: [ :start :end | s << 's:' << start asString << ' ' << 'e:' << end asString << ' ' ]]) >>> 's:1 e:5 s:7 e:8 s:10 e:13 '1Uintersection: aCollection "Answer the set theoretic intersection of two collections." "(#(1 2 3 4) intersection: #(3 4 5)) >>> #(3 4)" "(#(1 2 3 4) intersection: #()) >>> #()" "(#() intersection: #(1 2 3 4)) >>> #()" "('hello' intersection: 'world') >>> 'ol'" ^ self species withAll: (self asSet intersection: aCollection) asArray2(#(1 3 5 7 11 15 23) findBinaryIndex: [ :arg | 25 - arg ] ifNone: [ :a :b | 'between: ',{a. b} printString ]) >>> 'between: #(7 8)' 12| aCollection "Return all the elements that appear in self or in aCollection. Alias of union:" "#(10 20 30) | (0 to: 15 by: 5) >>> #(0 15 5 30 20 10)" "'abc' | 'cbe' >>> 'bcea'" ^ self union: aCollection6-19296Tests-unix-64-Transcript-NonInteractive-Tests-Test.xml131025533+('abc' sameAs: 'aBc' asWideString) >>> true7Tests-unix-64-DrTests-TestCoverage-Tests-Mocks-Test.xmldo: elementBlock separatedBy: separatorBlock "Evaluate the elementBlock for all elements in the receiver, and evaluate the separatorBlock between." "(String streamContents: [:s | #(1 2 3) do: [:each | s << each asString] separatedBy: [s << ', ']]) >>> '1, 2, 3'" | beforeFirst | beforeFirst := true. self do: [:each | beforeFirst ifTrue: [beforeFirst := false] ifFalse: [separatorBlock value]. elementBlock value: each]| TTTT | tttt n. ^ ttttFirst N/2 ... last N/2#() asBag = Bag new >>> true+('hello!' noneSatisfy: #isLetter) >>> false1,((1 to: 10) select: #isPrime) >>> #(2 3 5 7)20withIndexCollect: elementAndIndexBlock "Just like with:collect: except that the iteration index supplies the second argument to the block." "(#(10 20 30) withIndexCollect: [:each :index | each + (index * 2)]) >>> #(12 24 36)" | result | result := self species new: self size. 1 to: self size do: [:index | result at: index put: (elementAndIndexBlock value: (self at: index) value: index)]. ^ result500:Xsu036r1halt20283>Answer a Point that is the difference of the receiver and arg.17,(#(11 22 33) before: 44 ifAbsent: 55) >>> 55+(#(2 4 6) noneSatisfy: [:x|x odd]) >>> true0is error1MReturn a collection of pharo comment nodes: expressions following the pattern2531016rDF1.0151410042cUnmatched " in comment.1*-1 + 1--1 + 1- -1#(-10 printStringBase: 10) >>> '-10'02018allSentMessages 10.199999999g'Here 123should % be 6 the name6 of the method' asCamelCase >>> 'Here123should%Be6TheName6OfTheMethod'651012328ATests-unix-64-Calypso-SystemPlugins-Traits-Queries-Tests-Test.xml0*printStringBase: base "Return a String representation of this number in base b." "(10 printStringBase: 10) >>> '10'" "(-10 printStringBase: 10) >>> '-10'" "(10 printStringBase: 2) >>> '1010'" "(10 printStringBase: 16) >>> 'A'" ^ String streamContents: [:strm | self printOn: strm base: base]28 December 201816corner: aPoint "Answer a Rectangle whose origin is the receiver and whose corner is aPoint. This is one of the infix ways of expressing the creation of a rectangle." "(10@10 corner: 100@100) >>> (10@10 corner: 100@100)" ^ Rectangle origin: self corner: aPoint(1 to: 10) isEmpty >>> false 0n ssss0Xsss104Return a pair. It is handy to support the tweaking of pharo doc expression. A pharo doc expression is a comment as the following one:second "Answer the second element of the receiver. Raise an error if there are not enough elements." "#(a b c d e f g h i) second >>> #b" ^ self at: 21079([#() sum] on: CollectionIsEmpty do: ['oops']) >>> 'oops'100b1 511111444411411 12r89ab cdstring11groupedBy: aBlock having: aSelectionBlock "Like in SQL operation - Split the recievers contents into collections of elements for which keyBlock returns the same results, and return those collections allowed by selectBlock." "In the following example, the group `3->#(34)` is filtered out because there is not 2 elements." "(#(1 5 21 28 34) groupedBy: [:x| x // 10] having: [:v| v size = 2]) >>> {0->#(1 5). 2->#(21 28)} asOrderedDictionary" ^ (self groupedBy: aBlock) select: aSelectionBlock5"(#(1 -2 4) sumNumbers: #abs) >>> 73x0vector0df-3:8(#(xa xb xc xy xz) isSortedBy: #last ascending) >>> trueAnswer the number of indexable fields in the receiver. This value is the same as the largest legal subscript. Included so that a SmallInteger can behave like a LargePositiveInteger or LargeNegativeInteger.M(#( (2 -3) #((4 -5)) #(-6)) flatCollect: [ :e | e abs ]) >>> #(2 3 #(4 5) 6)a30oselectEverySecond "#(1 2 3 4) selectEverySecond asArray >>> #(2 4) " ^ self selectEvery: [ :i | i \\ 2 = 0 ]1111 $_ isDashPunctuation >>> false130%('pharo' endsWith: 'phuro') >>> falseaZReturn an hexadecimal two-digits string between 00 and FF for a float between 0.0 and 1.093 #( #'^' 1 )11-3#[ 1 ]. #[ 2 ]2013do: aBlock "Evaluate aBlock with each of the receiver's elements as the argument. This is the general foreach method, but for most standard needs there is often a more specific and simpler method." "|s| s:=0. #(10 20 30) do: [:each | s := s + each]. s >>> 60" "but use sum or inject:into: instead" "(#(10 20 30) inject: 0 into: [:s :each| s + each ]) >>> 60" "#(10 20 30) sum >>> 60" " (String streamContents: [:s | #('hello' 'the' 'world') do: [:each | s << each]]) >>> 'hellotheworld'" self subclassResponsibilityfalse ==> [true] >>> true2rAnswer the index of the first substring within the receiver. If the receiver does not contain substring, answer 0.d200i{ xS(#(1 + 3 - 5) reduceRight: [ :a :op :b | a perform: op with: b ]) >>> (1 + (3 - 5))9 \\ -4 >>> -3CAnswer a number that is the minimum of the x and y of the receiver.'{1. 2} asBag = {2. 1} asBag >>> true21'a := a. [ :a | | a a | . := a ]. a := a1(#() ifEmpty: [0]) >>> 0200#n0cannot resolve fourcode Pharo is <1s> 'hello<1?success:is error>kIf the receiver is not nil, pass it as argument to the ifNotNilBlock block. else execute the nilBlock block.{ 'foo'. ('fo','o') } asIdentitySet size >>> 2 ^ 1. 2. ^ 335+Tests-unix-64-Debugger-Model-Tests-Test.xml3a7('pharo' endsWith: 'aRo' caseSensitive: false) >>> true/Tests-unix-64-Reflectivity-Tools-Tests-Test.xml0Tests-unix-64-Kernel-Tests-WithCompiler-Test.xml856Answer the receiver with leading and trailing aString.203208-bit integer expected3(#(1 2 3 4) select: [:each | each > 2 ]) >>> #(3 4)withIndexDo: elementAndIndexBlock "Just like do: except that the iteration index supplies the second argument to the block" "Support collection enumeration with a counter, even though not ordered" "|s|s:=0. #(4 2 1) withIndexDo: [:e :i| s:=s + (e * (10 ** (i-1)))]. s >>> 124" "|a|a:= Array new: 3. #(10 20 30) withIndexDo: [:e :i| a at: 4-i put: e+1]. a >>> #(31 21 11)" | index | index := 0. self do: [:item | elementAndIndexBlock value: item value: (index := index+1)] 'Foo''Bar'113Answer an OrderedCollection whose elements are the elements of the receiver. The order in which elements are added depends on the order in which the receiver enumerates its elements. In the case of unordered collections, the ordering is not necessarily the same for multiple requests for the conversion.1{Evaluate aBlock with each of aCollections's elements as the argument. Collect the resulting values into self. Answer self.3200##"""####"""###"""#####"""0nnnnXnn11aABCz6825zk cd zk ef zk[ : | *true ifTrue: [ ^ 1 ] ifFalse: [ ^ 2 ]. ^ 3a0f({'1'. '1'. '2'. '1'. '1'} atRandom: (Random seed: -42) weighting: [ :each | each asInteger ]) >>> '1'21detectIndex: aBlock "Return index of first element that satisfies aBlock. If no matching element is found, raise an error." "(#(1 5 10) detectIndex: [ :each | each > 3 ]) >>> 2" ^ self detectIndex: aBlock ifNone: [ self errorNotFound: aBlock ]2Answer whether the receiver contains any elements.B({#x .#y .#z} atAll: #(1 3) putAll: #(a e); yourself) >>> #(a y e)9(#(xa xc xz xb xy) isSortedBy: #last ascending) >>> falseW EW256013120> aString "Answer whether the receiver sorts after aString. The collation order is simple ascii (with case differences)." " 'def' > 'abc' >>> true" " 'def' > 'def' >>> false" " 'abc' > 'def' >>> false" ^ (self compare: self with: aString) > 0000 r15+('hello' sorted: [:a :b| a>=b]) >>> 'ollhe'1#(3.1479 roundDownTo: 0.01) >>> 3.144'' expandMacros >>> OSPlatform current lineEnding9(#(a b c d e) indexOfAnyOf: #(x y c) startingAt: 4) >>> 0!'' expandMacros >>> String tab19a0vector0foo300000100002000030555655755855599A9B9C999FEEEGDDDH5552.30294(#(a b c d e) identityIndexOf: #c ifAbsent: 7) >>> 342world32the%#[1 2] asByteArray == #[1 2] >>> truezmax "Answer a number that is the maximum of the x and y of the receiver." "(100@200) max >>> 200" ^ self x max: self y111108classSide "Return the metaclass of the couple class/metaclass. Useful to avoid explicit test." "Point classSide >>> Point class" "Point class classSide >>> Point class" ^ selfisInitialQuote "Return whether the receiver is https://www.compart.com/en/unicode/category/Pi" "$' isInitialQuote >>> false" ^ self characterSet isInitialQuote: self1! foo: arg bar: arr ^ arg + arr . 20@foo:3Returns whether the receiver contains the argument.Whitespace characters:28 October 2018xwithIndexSelect: elementAndIndexBlock "select elements from the receiver that the block evaluates true with the element and its index." "(#('We' 'love' 'pharo!') withIndexSelect: [:value :index | value size - 1 <= index]) >>> #('We')" ^ self class new: self size streamContents: [ :stream | 1 to: self size do: [ :index | | each | (elementAndIndexBlock value: (each := self at: index) value: index) ifTrue: [ stream nextPut: each ] ] ]HExecute the receiver with one or two arguments depending on the receiver1'A' asHex >>> '16r41'20 between: over 1Hello!9Answer whether the receiver is an unary message selector.5/#( aa:bb:cc #'aa:bb:cc' #cc #'==' #'==' #= #= )546888333A9992BDDD111E0000FFHHH10;'234znak ::x43 ) :2' asValidSelector >>> #v234znak:x43:v20.9198435972629521thisContext := thisContext43333withIndexSelect: elementAndIndexBlock "Optimized version of SequenceableCollection>>#withIndexSelect: " "(#('We' 'love' 'pharo!') asOrderedCollection withIndexSelect: [:value :index | value size - 1 <= index]) >>> (OrderedCollection with: 'We')" | newCollection element | newCollection := self copyEmpty. firstIndex to: lastIndex do: [ :index | (elementAndIndexBlock value: (element := array at: index) value: index) ifTrue: [ newCollection addNoSort: element ] ]. ^ newCollection1[((Date year: 2018 month: 9 day: 28) previous: 'Sunday') printString >>> '23 September 2018'204Return a SortFunction around the receiver, where the receiver will be used as a unary message to send to both a and b during sorting, and then the result of said send will be collated iusing aSortFunction.abc5abc23453 n ssss;Xsss-5-Tests3(Date year: 2018 month: 9 day: 28) monthIndex >>> 910 ('foo*' match: 'foozo') >>> true3100!(10 beBetween: 20 and: 12) >>> 1210xAnswer the integer represented by the leading digits of the receiver, or nil if the receiver does not begin with a digitElvis4009E({10. 20} collect: [:x|x+1] into: {'a'. 'b'. 'c'}) >>> {11. 21. 'c'.}37to2abc23(10@10 corner: 100@100) >>> (10@10 corner: 100@100)2000####################0@Tests-unix-64-Calypso-SystemPlugins-Flags-Queries-Tests-Test.xml]('a000' asWideString sameAs: (ByteArray with: 97 with: 0 with: 0 with: 0) asString) >>> false07CWrite the STON serialization of object to the character writeStream5('hello' surroundedBy: ' abd ') >>> ' abd hello abd ' 100000000311allButLastDo: block "Executes aBlock on each of the receiver's elements except for the last one" "(Array streamContents: [:stream | #(1 2 3) allButLastDo: [:each | stream nextPut: (each + 10)]]) >>> #(11 12)" 1 to: self size - 1 do: [:index | block value: (self at: index)]20000112111533334116699AABAAAECCCCDDAAF99888888777G1 10000000000009 between:and:1018 foo: arg ^ arg min: arg + 2; abs3424[Answer the fifth element of the receiver. Raise an error if there are not enough elements.hscaleTo: anExtent "Return a Point scalefactor for shrinking a thumbnail of the receiver's extent to fit within anExtent. self and anExtent are expected to have positive nonZero x and y." "(200@200 scaleTo: 400@400) >>> (2.0@2.0)" "(40@40 scaleTo: 400@400) >>> (10.0@10.0)" | factor sX sY | factor := 3.0 reciprocal. "EccentricityThreshhold reciprical" sX := anExtent x / self x asFloat. sY := anExtent y / self y asFloat. sX = sY ifTrue: [ ^ sX @ sY ]. "Same aspect ratio" ^ sX < sY ifTrue: [ sX @ (sX max: sY * factor) ] ifFalse: [ (sY max: sX * factor ) @ sY ]Add the argument, newObject, as an element of the receiver. Put it in the sequence just succeeding oldObject. Answer newObject. Raises an error if oldObject is not found31024{1@5. 10@ -4} max >>> (10@5)3oopsg02018110(Tests-unix-64-BeautifulComments-Test.xml[ ^ 1 ]. 2. ^ 331bC('aeiou' findFirstInByteString: 'hello world' startingAt: 3) >>> 5.y1[ | a bsort: aSortBlock "Sort this array using aSortBlock. The block should take two arguments and return true if the first element should preceed the second one." "({3. 9. 1} sort: [:a :b | a <= b ]) >>> #(1 3 9)" "({3. 9. 1} sort: [:a :b | a >= b ]) >>> #(9 3 1)" "({#xa. #xc. #xz. #xb. #xy} sort: #last ascending) >>> #(xa xb xc xy xz)" self mergeSortFrom: 1 to: self size by: aSortBlock8,foo | a | a := 1. ^ [ :a | a ] value: 10 + aOptimized implementation33151 12r89abcd361012ereject: rejectBlock thenDo: aBlock "Refer to the comment in Collection>>#reject:thenDo:" "(Array streamContents: [:stream | #(1 2 3 4) reject: [:each | each = 3 ] thenDo: [:each | stream nextPut: each + 10]]) >>> #(11 12 14)" | each | 1 to: self size do: [ :index | (rejectBlock value: (each := self at: index)) ifFalse: [ aBlock value: each ]]pppp X ( . ^ 1 )4aRoXanyOne "Answer a representative sample of the receiver. It raises an error when the collection is empty. This method can be helpful when needing to preinfer the nature of the contents of semi-homogeneous collections." "#(1 2 3) anyOne >>> 1" " ([#() anyOne] on: SubscriptOutOfBounds do: [ :ex | 'whatever' ]) >>> 'whatever' " ^ self first({Character space. Character space} join: #('Pharo' 'is' 'cool')) >>> {$P. $h. $a. $r. $o. Character space. Character space. $i. $s. Character space. Character space. $c. $o. $o. $l}PhaRo^Return whether the receiver is ... one of these https://www.compart.com/en/unicode/category/Mea0qjoin: aCollection "Append the elements of the argument, aSequenceableCollection, separating them by the receiver." "('*' join: #('WWWWW' 'W EW' 'zzzz')) >>> 'WWWWW*W EW*zzzz'" ^ self species new: (aCollection size * self size) streamContents: [:stream | aCollection do: [:each | stream nextPutAll: each asString] separatedBy: [stream nextPutAll: self]]`Answer a copy of the receiver that does not contain any elements equal to those in aCollection.021aa3y14Tests-unix-64-Zinc-Character-Encoding-Tests-Test.xml0 abd 292({'hel','lo'. 'world'} includes: 'hello') >>> true31collatedBy: aSortFunction "Return a SortFunction around the receiver, where the receiver will be used as a unary message to send to both a and b during sorting, and then the result of said send will be collated iusing aSortFunction." "(#('abc' 'de' 'fghi') sorted: (#size collatedBy: [:e|e bitAnd: 1]) , #size) >>> #( 'de' 'fghi' 'abc')" ^PropertySortFunction property: self collatedWith: aSortFunction asSortFunctioniList elements betwen () and separated by spaces. Is used by printOn: and other related printing methods.21`('test te string' copyReplaceAll: 'te' with: 'longone' asTokens: true) >>> 'test longone string'03Signal CollectionIsEmpty if the collection is empty. foo: arg ^ ( ( ( ( arg ) ) + ( ( 1 ) ) ) ) . 551foo: #( #[ 0 1 2 ]union: aCollection "Answer the set theoretic union of two collections." "(#(1 2 3) union: #(4 5 6 2)) asSet >>> #(1 2 3 4 5 6) asSet" "('hello' union: 'world') >>> 'whlorde' " | set | set := self asSet addAll: aCollection; yourself. ^ self species withAll: set asArray31.5 rounded >>> 210bcea31 expandMacrosWithArguments: anArray "Interpret the receiver pattern (<1p>, <1s>, ...) with argument passed in anArray." " writes the N-th argument using #printString, but without trancating it." "('<1p>: <2p>' expandMacrosWith: 'Number' with: 5 with: nil) >>> '''Number'': 5'" " writes the N-th argument, which should be a String, or a collection of printable objects. Note also important distinction for single-quotes inside the argument; with

they will be doubled." "('<1s> vs <1p>' expandMacrosWith: 'it''em') >>> 'it''em vs ''it''''em'''" "Whitespace characters:" "'' expandMacros >>> String tab" "'' expandMacros >>> String cr" "'' expandMacros >>> OSPlatform current lineEnding" "'' expandMacros >>> String lf" "Writing '<' character: To write '<', prepend it with a percent sign." "'%' expandMacros >>> ''" "Ternary operator: An if-else string can be written with . The N-th argument must be a Boolean. Yes-string cannot contain colon ':', as it terminates the yes-string. No-string cannot contain closing angle bracket '>', as it terminates the no-string." "('<1?success:error>' expandMacrosWith: true) >>> 'success'" "('<1?success:is error>' expandMacrosWith: false) >>> 'is error'" | readStream char index | ^ self species new: self size streamContents: [ :newStream | readStream := self readStream. [ readStream atEnd ] whileFalse: [ char := readStream next. char == $< ifTrue: [ | nextChar | nextChar := readStream next asUppercase. nextChar == $R ifTrue: [ newStream cr ]. nextChar == $L ifTrue: [ newStream lf ]. nextChar == $T ifTrue: [ newStream tab ]. nextChar == $N ifTrue: [ newStream nextPutAll: OSPlatform current lineEnding ]. nextChar isDigit ifTrue: [ index := nextChar digitValue. [ readStream atEnd or: [ (nextChar := readStream next asUppercase) isDigit not ] ] whileFalse: [ index := index * 10 + nextChar digitValue ] ]. nextChar == $? ifTrue: [ | trueString falseString | trueString := readStream upTo: $:. falseString := readStream upTo: $>. readStream position: readStream position - 1. newStream nextPutAll: ((anArray at: index) ifTrue: [ trueString ] ifFalse: [ falseString ]) ]. nextChar == $P ifTrue: [ (anArray at: index) printOn: newStream ]. nextChar == $S ifTrue: [ newStream nextPutAll: (anArray at: index) ]. readStream skipTo: $> ] ifFalse: [ newStream nextPut: (char == $% ifTrue: [ readStream next ] ifFalse: [ char ]) ] ] ]16rremove: oldObject "Remove oldObject from the receiver's elements. Answer oldObject unless no element is equal to oldObject, in which case, raise an error. ArrayedCollections cannot respond to this message." "(#(10 20 10) asOrderedCollection remove: 10; yourself) >>> #(20 10) asOrderedCollection" ^ self remove: oldObject ifAbsent: [self errorNotFound: oldObject]12foo | a | a := 1. ^ [ | a | a := 10. a ] value + a| a | [ ^ a ]. a := 1054({1. 2} asSet = {1. 2. 3} asSet >>> false501(false or: [true]) >>> trueBReturns a copy of the string doubling all occurence of aCharacter.14860vector03Point isInstanceSide >>> truefoo < bar: 1 > ppp | TTT | ttt n . ^ ttt . 'PhaRo' asLowercase >>> 'pharo'onePoint isClassSide >>> false22004-02-29T13:33:00+02:00XX 255-(#(10 20 30) includesAny: #(50 40)) >>> false23 test test9 & 20chex "Returns a string representation of the receiver as hex, prefixed with 16r. DO NOT CHANGE THIS! The Cog VMMaker depends on this." "$A hex >>> '16r41'" ^ self asInteger hex-4Answer a dictionary whose keys are the result of evaluating aBlock for all my elements, and the value for each key is the selection of my elements that evaluated to that key. Uses species.5EMight be compiled inline for speed, see RBMessageNode>>#isInlineIfNil012122dF('Hello' detect: #isLowercase ifFound: #uppercase ifNone: [$X]) >>> $E0vector0e30-10 hexString >>> '-16rA'O('<1p>: <2p>' expandMacrosWith: 'Number' with: 5 with: nil) >>> '''Number'': 5'-24(OrderedCollection new growAtFirst; capacity) >>> 2020displayStringOn:325500In {1} you can escape \{ by prefixing it with \\5Unexpected block parameter0.0 #(1 2 3) negated >>> #(-1 -2 -3)20139100''foo' asCommaStringAnd >>> 'f, o and o'0+1. -a. - 1. -"A"1XnX nX0vector0isfindBinaryIndex: aBlock do: actionBlock ifNone: exceptionBlock "Search for an element in the receiver using binary search. The argument aBlock is a one-element block returning 0 - if the element is the one searched for <0 - if the search should continue in the first half >0 - if the search should continue in the second half If found, evaluate actionBlock with the index as argument If no matching element is found, evaluate exceptionBlock, with the indexes of the 'bounding' elements as arguments. Warning: Might give invalid indexes, see examples below" "(#(1 3 5 7 11 15 23) findBinaryIndex: [ :arg | 11 - arg ] do: [ :found | found ] ifNone: [ :a :b | 'between: ', {a. b} printString ]) >>> 5" "(#(1 3 5 7 11 15 23) findBinaryIndex: [ :arg | 12 - arg ] do: [ :found | found ] ifNone: [ :a :b | 'between: ', {a. b} printString ]) >>> 'between: #(5 6)'" "(#(1 3 5 7 11 15 23) findBinaryIndex: [ :arg | 0.5 - arg ] do: [ :found | found ] ifNone: [ :a :b | 'between: ', {a. b} printString ]) >>> 'between: #(0 1)'" "(#(1 3 5 7 11 15 23) findBinaryIndex: [ :arg | 25 - arg ] do: [ :found | found ] ifNone: [ :a :b | 'between: ',{a. b} printString ]) >>> 'between: #(7 8)' " | index low high test | low := 1. high := self size. [ index := high + low // 2. low > high ] whileFalse: [ test := aBlock value: (self at: index). test = 0 ifTrue: [ ^ actionBlock value: index ] ifFalse: [ test > 0 ifTrue: [ low := index + 1 ] ifFalse: [ high := index - 1 ] ] ]. ^ exceptionBlock cull: high cull: low10lviAAnswer how many of the receiver's elements are equal to anObject.<('*' join: #('WWWWW' 'W EW' 'zzzz')) >>> 'WWWWW*W EW*zzzz'3lo0vector0100000010011.01foo: + #'0.02#(-10 printStringBase: 10) >>> '-10'| T |Xt3256114HasCommaString "Return collection printed as 'a, b, c' " "#('a' 'b' 'c') asCommaString >>> 'a, b, c'" "#('a') asCommaString >>> 'a'" "#() asCommaString >>> ''" "'foo' asCommaString >>> 'f, o, o'" "(10 to: 25 by: 5) asCommaString >>> '10, 15, 20, 25'" ^ String streamContents: [ :s | self asStringOn: s delimiter: ', ' ](String streamContents: [:s| {'one'->1. 'two'->2} associationsDo: [:a| s << a key << ':' << a value asString << ';']]) >>> 'one:1;two:2;'24EidentityIncludes: anObject "Answer whether anObject is one of the receiver's elements." "({#hello. #world} identityIncludes: #hello) >>> true" "({'hel','lo'. 'world'} identityIncludes: 'hello') >>> false" "({'hel','lo'. 'world'} includes: 'hello') >>> true" self do: [:each | anObject == each ifTrue: [^true]]. ^false1<( #(1 2 3) asSet reduce: [ :a :b | a + b ] ) >>> (1 + 2 + 3)11be1Return a color with the given r, g, and b components specified as integers in the range [0..r]. This avoids the floating point arithmetic in the red:green:blue: message and is thus a bit faster for certain applications (such as computing a sequence of colors for a palette).21TAdd new empty slots to the front of array, while keeping the empty slots at the end.subtractDays: dayCount "((Date year: 2018 month: 9 day: 28) subtractDays: 1) printString >>> '27 September 2018'" ^ (self asDateAndTime - (dayCount days)) asDateaeiou101h(OrderedCollection new add: 41; add: 42 after: 41; add: 43 after: 41; yourself) asArray >>> #(41 43 42)'abc98' numericSuffix >>> 98false & true >>> false205Tests-unix-64-Collections-Sequenceable-Tests-Test.xml124(STON fromStream: 'Point[1,2]' readStream) >>> (1@2)h 28/9/2018-141##(a b c d e f g h i) seventh >>> #g0a1b5(#(1 2 3 4) reject: [:each | each = 3 ]) >>> #(1 2 4)XX XX n XX# n X X28*(#(a b c d) after: #x ifAbsent: #z) >>> #z6Collection size and block argument count do not match.pLike asArray: but return a copy if self is already an Array. This ensures that the result is always a new Array!a := a. { [ :a | a := a }. a := apharo2030(#(a b a d e) lastIndexOf: #c ifAbsent: 7) >>> 70000033^ u07( #() asSet intersection: #(1 2 3 4) asSet) >>> Set new00020>{ 1. 2. 3 } asSet >>> (Set new add: 1; add:2; add:3; yourself)5250 #[ 1 -1 2 ]/ "a" foo: "b" x "c" bar: "d" y "e" ^ "f" x "g" 113110true not >>> falseisTestPackage "1. Test package ends with suffix -Tests. Suffix is case sensitive. 2. Or test package contains '-Tests-' in middle. Some examples: " "(RPackage named: 'MockPackage-Tests') isTestPackage >>> true" "(RPackage named: 'MockPackage-tests') isTestPackage >>> true" "(RPackage named: 'MockPackage') isTestPackage >>> false" "(RPackage named: 'MockPackage-Tests-Package') isTestPackage >>> true" ^ (self name endsWith: '-Tests' caseSensitive: false) or: [ self name includesSubstring: '-Tests-' caseSensitive: false ]-10103-43122444true asBit >>> 1User111 8 ** 2 >>> 64hello219030(nil ifNil: [42] ifNotNil: [:o | o +3 ] ) >>> 42122(100@200) ceiling >>> (100@200)00102230Evaluate aBlock with each of the receiver's elements as the argument. Collect into a new collection like the receiver, only those elements for which aBlock evaluates to true. Answer the new collection.4Negation -- answer true since the receiver is false. actions.#at:putNext: asTestSelector >>> #testAtPutNextb0vector0XReturn the middle element, or as close as we can get. The collection must not be empty.XXXXaXXbXXXXcXXXXXXdXXXX)(#() ifNotEmpty: [:x| x average]) >>> #()#'abc' asWideString = 'abc' >>> true423UReturn whether the receiver is composed entirely of digits and has at least one digita$] isClosePunctuation >>> true #( #( 0 1 2 )a1020z'Now is the time for all good people to come to the aid of the cause of world peace. It is just fine, even desirable, to love your country, if that means wanting it to play a beneficial role in the course of world events and be the best possible example of a good society. But if it means wanting dominion over the rest of the world, it is not love but defensiveness or self-glorification, and will lead only to oblivion.' piecesCutWhere: [:a :b| a = $. and: [b isSeparator]]b1016777215KReturns the reciprocal of self. In case self is 0 the / signals ZeroDivideThis statement is false!fghi7Answer a Point that is the sum of the receiver and arg.0.13691995878400012(true and: [ false ]) >>> false#311112004445444778796AAAB4400ECCCCD!u u. X X X X X. X X8[ :super | super + 1 ]2#19a7215x02elmer3ypReturns the keywords of the provided selector. If the receiver is not keyword-based, an empty array is returned.e10dwimpy11+#(1 2 3) asOrderedCollection capacity >>> 3print: positiveNumberString on: aStream prefix: prefix length: minimum padded: zeroFlag "Return a String based on concatenation of positiveNumberString with prefix then padded by 0 is zeroFlag is set for a minimum length." "(String streamContents: [:s | 10 print: '10' on: s prefix: 'zz' length: 4 padded: true] ) >>> 'zz10'" | padLength | padLength := minimum - positiveNumberString size - prefix size. padLength > 0 ifTrue: [zeroFlag ifTrue: [aStream nextPutAll: prefix; nextPutAll: (String new: padLength withAll: $0)] ifFalse: [aStream nextPutAll: (String new: padLength withAll: Character space); nextPutAll: prefix]] ifFalse: [aStream nextPutAll: prefix]. aStream nextPutAll: positiveNumberString{1@5. 2@3. 4@7} sum >>> (7@15)&ProtoObject class superclass >>> Classworld323 Tests-unix-64| | "a := a. [ | a a | . := a ]. a := a40a := a. [ :a [ :a. a := adbar110 000000000005xc1I return true if a method is an extension method. Which means that the methods is not packaged in the package of the class containing the method, but in another package.5('action' alike: 'name') >>> 0. 0001003343500"(#() allSatisfy: [false]) >>> true'Answer the last element of the receiver1hello10detectIndex: aBlock ifNone: exceptionBlock "Return index of first element that satisfies aBlock. If no matching element is found, evaluate exceptionBlock." "(#(1 5 10) detectIndex: [ :each | each > 3 ] ifNone: ['Not found']) >>> 2" "(#(1 5 10) detectIndex: [ :each | each > 15 ] ifNone: ['Not found']) >>> 'Not found'" self doWithIndex: [:each :index | (aBlock value: each) ifTrue: [^ index]]. ^ exceptionBlock value0.011112.0whlorde?Answer whether the receiver begins with the given prefix string62321 abs67e01(#(1 3 5 7 11 15 23) findBinaryIndex: [ :arg | 0.5 - arg ] do: [ :found | found ] ifNone: [ :a :b | 'between: ', {a. b} printString ]) >>> 'between: #(0 1)'2003Since the condition is true, the value is the true alternative, which is nil. Execution does not actually reach here because the expression is compiled in-line.11|Answer the set theoretic intersection of two collections. Optimized version for Sets where no intermediate Set is necessary ppp <<<<< X . 'hello'combinations: kk atATimeDo: aBlock "Take the items in the receiver, kk at a time, and evaluate the block for each combination. Hand in an array of elements of self as the block argument. Each combination only occurs once, and order of the elements does not matter. There are (self size take: kk) combinations." "(Array streamContents: [:stream | 'abcde' combinations: 3 atATimeDo: [:each | stream nextPut: each copy]]) >>> #(#($a $b $c) #($a $b $d) #($a $b $e) #($a $c $d) #($a $c $e) #($a $d $e) #($b $c $d) #($b $c $e) #($b $d $e) #($c $d $e))" | aCollection | aCollection := Array new: kk. self combinationsAt: 1 in: aCollection after: 0 do: aBlock3 n uuuuuu ,(#(1 2 3) noneSatisfy: [:x|x odd]) >>> false6 hello world2'optimized version for single delimiters0vector0!'foo' asCommaString >>> 'f, o, o'a0102463.(10 to: 1 by: -1) asOpenInterval >>> (9 to: 2)311403foo: a x: a y: b [ :a :a :b | | a a b | a + a + b ]16rDF212850/ arg "Pairwise quotient of two sequenceable collections of the same length." "#(10 20 30) / #(1 3 4.0) >>> {10. (20/3). 7.5}" "{10@20. 30@0} / {1@3. 4.0@1} >>> {(10@(20/3)). (7.5@0)}" ^ arg adaptToCollection: self andSend: #/'' isNotEmpty >>> false221blue 3r12. 345 test testReturns a string representation of the receiver as hex, prefixed with 16r. DO NOT CHANGE THIS! The Cog VMMaker depends on this.u s 36Tests-unix-64-Morphic-Widgets-FastTable-Tests-Test.xml1(#(1 3 5 7 11 15 23) findBinaryIndex: [ :arg | 25 - arg ] do: [ :found | found ] ifNone: [ :a :b | 'between: ',{a. b} printString ]) >>> 'between: #(7 8)' 3 {1 . 2 . 3 . 4 . 5} median >>> 3421,'x isSymbol: 33' findSelector >>> #isSymbol:~(DateAndTime fromString: '2019-08-17T13:33:00+02:00') asDate printString >>> (Date newDay: 17 month: 8 year: 2019) printString #( 0 1r2 4 )'/ """ pppp """ A """ pppp """ A """ ^ """ a """ 20 . 510360.0E((Date year: 2018 month: 9 day: 28) subtractDate: '2018-09-27') >>> 1[ &('Hello!' detect: #isLowercase) >>> $e312(#(11 22 33) asOrderedCollection atWrap: 4) >>> 11Warning signal: 'false error'10M(Date year: 2018 month: 9 day: 28) asDate printString >>> '28 September 2018'abcDefgh3030020538Tests-unix-64-Microdown-RichTextPresenter-Tests-Test.xmlnuun s nssn s ns nnabc3.1allButFirstDo: aBlock "Executes aBlock on each of the receiver's elements except for the first one" "(Array streamContents: [:stream | #(1 2 3) allButFirstDo: [:each | stream nextPut: (each + 10)]]) >>> #(12 13)" 2 to: self size do: [:index | aBlock value: (self at: index)]sorted: aSortBlockOrNil "Return a new sequenceable collection which contains the same elements as self but its elements are sorted by aSortBlockOrNil. The block should take two arguments and return true if the first element should preceed the second one. If aSortBlock is nil then <= is used for comparison." "(#(3 9 1) sorted: [:a :b | a <= b ]) >>> #(1 3 9)" "(#(3 9 1) sorted: [:a :b | a >= b ]) >>> #(9 3 1)" "(#(xa xc xz xb xy) sorted: #last ascending) >>> #(xa xb xc xy xz)" ^self copy sort: aSortBlockOrNil471.2504 and m({64->$@} asDictionary fillFrom: 'AB' with: [:x|x asciiValue -> x]) >>> {64->$@. 65->$A. 66->$B} asDictionary -234.567000.53!(#(a b c d e) last: 2) >>> #(d e)0[ | 102#1r04 factorial >>> 2420 hellotheworld$Optimized version based on primitive66% foo: arg ^ arg min: arg + 2 ; abs . D('||' split: 'foo||bar||2')>>>#('foo' 'bar' '2') asOrderedCollection19%(3.1479 truncateTo: 0.005) >>> 3.145XXXXXXXXXXXXXXXX3X X 2zRound the decimal part of the receiver to be limited to the number of wished decimal. Only leave a fixed amount of decimal foofoofoo5-1a3234znak ::x43 ) :20c1sd20131+001"""1"""#"""#"""#"""#"""#"""#"""#"""#"""0findSelector "Extract a selector with keyword parts from the receiver. While this doesn't give a true parse, in most cases it does what we want, in where it doesn't, we're none the worse for it." "'isSymbol' findSelector >>> #isSymbol" "'x isSymbol' findSelector >>> nil" "'x isSymbol: 33' findSelector >>> #isSymbol:" "'between:and:' findSelector >>> #'between:and:'" "'2 between: 0 and: 4' findSelector >>> #'between:and:'" "'2 between: ( 1 and: 4)' findSelector >>> #between:" "'( 1 and: 4)' findSelector >>> nil" | sel possibleParens | sel := self trimBoth. sel := sel copyReplaceAll: '#' with: ''. sel := sel copyReplaceAll: '[' with: ' [ '. (sel includes: $:) ifTrue: [sel := sel copyReplaceAll: ':' with: ': '. "for the style (aa max:bb) with no space" possibleParens := sel findTokens: Character separators. sel := self species streamContents: [:s | | level | level := 0. possibleParens do: [:token | | n | (level = 0 and: [token endsWith: ':']) ifTrue: [s nextPutAll: token] ifFalse: [(n := token occurrencesOf: $( ) > 0 ifTrue: [level := level + n]. (n := token occurrencesOf: $[ ) > 0 ifTrue: [level := level + n]. (n := token occurrencesOf: $] ) > 0 ifTrue: [level := level - n]. (n := token occurrencesOf: $) ) > 0 ifTrue: [level := level - n]]]]]. sel isEmpty ifTrue: [^ nil]. sel isOctetString ifTrue: [sel := sel asOctetString]. Symbol hasInterned: sel ifTrue: [:aSymbol | ^ aSymbol]. ^ nil19=atAllPut: anObject "Put anObject at every one of the receiver's indices." "({#x .#y. #z} atAllPut: #a) >>> #(a a a)" | size | (size := self size) > 26 "first method faster from 27 accesses and on" ifTrue: [self from: 1 to: size put: anObject] ifFalse: [1 to: size do: [:index | self at: index put: anObject]]2~Answer the value of falseAlternativeBlock. Execution does not actually reach here because the expression is compiled in-line.Special case of self = 0N|s| (#(1 2) detect: [ :each | each even ] ifFound: [ :e | s:=e*10 ]). s >>> 2011false := falsefooanuuuu11sasMutator "Return a setter message from a getter message. Return self if it is already a setter. Pay attention the implementation should be improved to return valid selector." "#name asMutator >>> #name:" "#name: asMutator >>> #name:" "#_ asMutator >>> #_:" "#foo:: asMutator >>> #'foo::'" self endsWithAColon ifTrue:[ ^ self ]. ^ (self copyWith: $:) asSymbol20a'foo10' endsWithDigit >>> true2#('' ifEmpty: ['(nil)']) >>> '(nil)' Pharo is <1p>1156[ :a | a := 10. a ]Uor: alternativeBlock "Nonevaluating disjunction. If the receiver is false, answer the value of the argument, alternativeBlock; otherwise answer true without evaluating the argument." "(true or: [Error signal]) >>> true" "(true or: [false]) >>> true" "(false or: [true]) >>> true" "(false or: [3]) >>> 3" self subclassResponsibility2asCamelCase "Convert to CamelCase, i.e, remove spaces, and convert starting lowercase to uppercase." "'A man, a plan, a canal, panama' asCamelCase >>> 'AMan,APlan,ACanal,Panama'" "'Here 123should % be 6 the name6 of the method' asCamelCase >>> 'Here123should%Be6TheName6OfTheMethod'" ^ self species streamContents: [:stream | self substrings do: [:sub | stream nextPutAll: sub capitalized]]C(NSPerlinNoise2 new noise: 3.14 y: 42 z: 7) >>> 0.13691995878400012a := @(Tests-unix-64-Compression-Tests-Test.xml 3 odd >>> true32131Search for an element in the receiver using binary search. The argument aBlock is a one-element block returning 0 - if the element is the one searched for <0 - if the search should continue in the first half >0 - if the search should continue in the second half If found, evaluate actionBlock with the index as argument If no matching element is found, evaluate exceptionBlock, with the indexes of the 'bounding' elements as arguments. Warning: Might give invalid indexes, see examples below9 'def' < 'abc' >>> falseA clear ...summary5Split the argument using the receiver as a separator.1 2instanceSide "Return the class of the couple class/metaclass. Useful to avoid explicit test." "Point instanceSide >>> Point" "Point class instanceSide >>> Point" ^ self soleInstance16rDF(#(11 22 33) atWrap: 4) >>> 11?asFloatPoint "Convert me to a float point transforming both of my coordinates to floats using #asFloat. If x and y are already represented by floats return myself, otherwise create a new Point instance." "((30/3)@(2/2)) asFloatPoint >>> (10.0@1.0)" self isFloatPoint ifTrue: [ ^ self ]. ^ x asFloat @ y asFloat2102pcloseTo: aPoint "Return whether the receiver is close to the argument aPoint. The precision for point holding floats is defined by Float >> #closeTo:precision:. For points holding integer, closeTo: corresponds to equalsTo:" "((100@200) closeTo: (100@200)) >>> true" "((100@201) closeTo: (100@200)) >>> false" ^ (x closeTo: aPoint x) and: [ y closeTo: aPoint y ]42JReturn the green component of this color, a float in the range [0.0..1.0].worldaa#name: asMutator >>> #name:3.1479 1 foo: ^253writeStreamDo: aBlock "Evaluates the argument with the write stream of the collection. Answers the result." "(#() writeStreamDo: [ :stream | stream nextPut: '4'; space; nextPutAll: '34'. stream contents ]) >>> {'4'. Character space. $3. $4}" ^ aBlock value: self writeStream^Answer the first n elements of the receiver. Raise an error if there are not enough elements.K(#(a b c d e) indexOfSubCollection: #(c d) startingAt: 2 ifAbsent: 7) >>> 3actionZ(#(1 2 3 4) reject: [:each | each = 3 ] thenCollect: [:each | each + 10 ]) >>> #(11 12 14)2142{ifTrue: trueAlternativeBlock ifFalse: falseAlternativeBlock "If the receiver is true (i.e., the condition is true), then answer the value of the argument trueAlternativeBlock. If the receiver is false, answer the result of evaluating the argument falseAlternativeBlock. If the receiver is a nonBoolean then create an error notification. Execution does not actually reach here because the expression is compiled in-line." "(true ifTrue: [ 'That is true!' ] ifFalse: [ 'That is false!' ]) >>> 'That is true!'" "(false ifTrue: [ 'That is true!' ] ifFalse: [ 'That is false!' ]) >>> 'That is false!'" self subclassResponsibility0.005Pharo is 'cool'322asBag "Answer a Bag whose elements are the elements of the receiver." "{1. 2} asBag = {2. 1} asBag >>> true" "{1. 2} asBag = {1. 2. 2} asBag >>> false" "{1. 2} asBag = {1. 2. 3} asBag >>> false" "#() asBag = Bag new >>> true" ^ Bag withAll: selfe5ab2%Point class classSide >>> Point classs:1 e:5 s:7 e:8 s:10 e:13 X((Date year: 2018 month: 9 day: 28) subtractDays: 1) printString >>> '27 September 2018'521!(3.1479 roundDownTo: 0.1) >>> 3.1)(self >> #selector) isExtension >>> false210e:9133254463337228111900AA*Tests-unix-64-Spec2-Backend-Tests-Test.xml*baz1000200\Answer the second element of the receiver. Raise an error if there are not enough elements. | tmp | tmp := 1 . ^ tmp . 3(OrderedCollection new growAtLast; capacity) >>> 20Dconvert myself to an Integer representing 1 for true and 0 for false0ppp ^ 0 :B | 1 :B | b 1 ssssss nn s b 0 ssssss n710 xy01811.9283(String streamContents: [:s | '||' split: 'foo||bar||2' indicesDo: [ :start :end | s << 's:' << start asString << ' ' << 'e:' << end asString << ' ' ]]) >>> 's:1 e:3 s:6 e:8 s:11 e:11 '1[ :a a1F(#(1.9283 2.3029) closeTo: #(1.9284 2.3028) precision: 0.001) >>> true100d02ggggggg sssssss '''''''''''''e2,Tests-unix-64-NewTools-Scopes-Tests-Test.xml Not found5((0@0 corner: 100@100) containsPoint: 50@50) >>> true43pdetectMax: aBlock "Evaluate aBlock with each of the receiver's elements as the argument. Answer the element for which aBlock evaluates to the highest magnitude. If collection empty, return nil. This method might also be called elect:." "({ 2@6 . -4@3 . 10@ -3 } detectMax: [ :p | p x ]) >>> (10@ -3)" "({ 2@6 . -4@3 . 10@ -3 } detectMax: [ :p | p y ]) >>> (2@6)" "((10 to: 20) detectMax: [ :p | p gcd: 6 ]) >>> 12" "('Hello' detectMax: #asciiValue) >>> $o" | maxElement maxValue | self do: [:each | | val | maxValue == nil ifFalse: [ (val := aBlock value: each) > maxValue ifTrue: [ maxElement := each. maxValue := val]] ifTrue: ["first element" maxElement := each. maxValue := aBlock value: each]. "Note that there is no way to get the first element that works for all kinds of Collections. Must test every one."]. ^ maxElement31aprintShowingDecimalPlaces: placesDesired "Print the receiver showing precisely the given number of places desired. If placesDesired is positive, a decimal point and that many digits after the decimal point will always be shown. If placesDesired is zero, a whole number will be shown, without a decimal point. Here are some examples:" "(23 printShowingDecimalPlaces: 2) >>> '23.00'" "(23.5698 printShowingDecimalPlaces: 2) >>> '23.57'" "(-234.567 printShowingDecimalPlaces: 5) >>> '-234.56700'" "(23.4567 printShowingDecimalPlaces: 0) >>> '23'" "(-23.4567 printShowingDecimalPlaces: 0) >>> '-23'" "(100000000 printShowingDecimalPlaces: 1) >>> '100000000.0'" "(0.98 printShowingDecimalPlaces: 5) >>> '0.98000'" "(-0.98 printShowingDecimalPlaces: 2) >>> '-0.98'" "(2.567 printShowingDecimalPlaces: 2) >>> '2.57'" "(-2.567 printShowingDecimalPlaces: 2) >>> '-2.57'" "(0 printShowingDecimalPlaces: 2) >>> '0.00'" ^String new: placesDesired + 10 streamContents: [:aStream | self printOn: aStream showingDecimalPlaces: placesDesired]a-('hello!' noneSatisfy: #isUppercase) >>> true2Answer the index of the receiver's first element, such that that element equals the first element of aSubCollection, and the next elements equal the rest of the elements of aSubCollection. Begin the search at element anIndex of the receiver. If no such match is found, answer 0.4.0Return a String with the JSON serialization of object. Note that the object graph can only contain lists (Array) and maps (Dictionary) 11111000012040DEnnSHIFT_L11:(#(10 20 30) inject: 0 into: [:s :each| s + each ]) >>> 60u <1 00111000444222230005566600 111false | true >>> true0151561/00111111111110004444444444422223005566666666666uu )50eEvaluate the elementBlock for all elements in the receiver, and evaluate the separatorBlock between.5b1Ncollect: aBlock "Evaluate aBlock with each of my elements as the argument. Collect the resulting values into a collection that is like me. Answer the new collection. Override superclass in order to use addLast:, not at:put:." "(#(1 2 3) asOrderedCollection collect: [ :v | v * 10 ]) asArray >>> #(10 20 30)" "(#(1 2 3) asOrderedCollection collect: [ :v | 10 ]) asArray >>> #(10 10 10)" | newCollection | newCollection := self speciesForTransform new: self size. firstIndex to: lastIndex do: [ :index | newCollection addLast: (aBlock value: (array at: index)) ]. ^ newCollectionF(1 milliSecond + 2 nanoSeconds) printString >>> '0:00:00:00.001000002'nanoSecond "1 nanoSecond printString >>> '0:00:00:00.000000001'" "(1 milliSecond + 1 nanoSecond) printString >>> '0:00:00:00.001000001'" ^ self nanoSeconds->@ foo: 78#( #( 0 1 r2 3 )2341011390.1xAnswer the last element of the receiver. Pay attention, last is not equivalent to stop in certain situations. See below.03 '' expandMacros >>> String cra301(0.98 printShowingDecimalPlaces: 5) >>> '0.98000'.(#(40 41 42) asOrderedCollection at: 1) >>> 4011GEmit overlapping pairs of my elements into aBlock, along with an index.8(Color r: 0.5 g: 0.5 b: 1) green >>> 0.50048875855327470.81pReturn true if all my elements are close to the elements of same index of the parameter with a certain precisiony25(Date year: 2018 month: 9 day: 28) weekdayIndex >>> 61detect: aBlock ifFound: foundBlock ifNone: exceptionBlock "Evaluate aBlock with each of the receiver's elements as the argument. If some element evaluates aBlock to true, then cull this element into foundBlock and answer the result of this evaluation. If none evaluate to true, then evaluate exceptionBlock." "(#(1 2) detect: #even ifFound: #negated ifNone: [0]) >>> -2" "(#(1 3) detect: #even ifFound: #negated ifNone: [0]) >>> 0" "('Hello' detect: #isLowercase ifFound: #uppercase ifNone: [$X]) >>> $E" "('LOL' detect: #isLowercase ifFound: #uppercase ifNone: [$X]) >>> $X" self do: [ :each | (aBlock value: each) ifTrue: [ ^ foundBlock cull: each ] ]. ^ exceptionBlock value60.0splitOn: splitter indicesDo: aBlock "Perform an action specified as aBlock (with a start and end argument) to each of the indices of the receiver element that have been identified by splitting the receiver using the splitter argument. splitter - can be a subsequence, a Block or a Regex (String receiver only). Any other object used as a splitter is treated as an Array containing that object." "(String streamContents: [:s | 'Pharo is cool' splitOn: Character space indicesDo: [ :start :end | s << 's:' << start asString << ' ' << 'e:' << end asString << ' ' ]]) >>> 's:1 e:5 s:7 e:8 s:10 e:13 '" ^ splitter split: self indicesDo: aBlock2_Return true if both of my x and y coordinates are represented by float values, otherwise false!Tests-unix-64-SUnit-Core-Test.xml4 writes the N-th argument, which should be a String, or a collection of printable objects. Note also important distinction for single-quotes inside the argument; with

they will be doubled.283 'abc' < 'def' >>> true"0 :B :B :B | | T t T | t s t s t 01sorted "Return a new sequenceable collection which contains the same elements as self but its elements are sorted" "#(3 1 4 2) sorted >>> #(1 2 3 4)" "'hello' sorted >>> 'ehllo'" "(10 to: 1 by: -2) sorted >>> (2 to: 10 by: 2)" ^self asArray sorted20-172342650vector0 '' expandMacros >>> String cr(Array streamContents: ([:stream | #(1 2 3) do: [:each | stream nextPut: (each + 10)] separatedBy: [ stream nextPut: 0 ]])) >>> #(11 0 12 0 13)hFormat the date in ISO 8601 standard like '2002-10-22' The result is of fixed size 10 characters long..We0r1allButLast: n "Answer a copy of the receiver containing all but the last n elements. Raise an error if there are not enough elements." "(#(a b c d) allButLast: 2) >>> #(a b)" "(#(a b c d) allButLast: 3) >>> #(a)" ^ self copyFrom: 1 to: self size - n 0ppp AA ppp AA ppp AA ppp AA ppp AA ppp AA ppp AA ppp AA ppp AA pppp AAA pppp AAA pppp AAA pppp AAA pppp AAA pppp AAA pppp AAA ^ aa2classSide "Return the metaclass of the couple class/metaclass. Useful to avoid explicit test." "Point classSide >>> Point class" "Point class classSide >>> Point class" ^ self class2001;(Date year: 2018 month: 9 day: 28) ddmmyyyy >>> '28/9/2018'100+Concatenate the receiver with the argument.1120/Tests-unix-64-Ring-ChunkImporter-Tests-Test.xml12P(Date year: 2018 month: 9 day: 28) onNextMonth printString >>> '28 October 2018'ppp X X230,select: aBlock "Optimized version of Collection>>#select:" "(#(1 2 3 4) select: [:each | each > 2 ]) >>> #(3 4)" | each | ^ self species new: self size streamContents: [ :stream| 1 to: self size do: [ :index | (aBlock value: (each := self at: index)) ifTrue: [ stream nextPut: each ]]]z0(Color h: 0 s: 1 v: 1) >>> (Color r: 1 g: 0 b:0) "z" foo "a" 1 "b". "c" ^ 2 "d" 'Number': 5160.0%('abc' escapeCharacter: $X) >>> 'abc'X([:c| c isSeparator] split: 'aa bb cc dd')>>> #('aa' 'bb' 'cc' 'dd') asOrderedCollection2810.98atest test ((#(1 3) detect: #even ifNone: [0]) >>> 03.Results are not defined non-integer arguments.SParse and materialize the STON representation in string, skipping C-style comments10 storeStringHex >>> '16rA'1241000102 'abc' <= 'abc' >>> true X0### ###0| self | self := 1. ^ self42150aD('LOL' detect: #isLowercase ifFound: #uppercase ifNone: [$X]) >>> $X4R(#(1 + 3 - 5) reduceLeft: [ :a :op :b | a perform: op with: b ]) >>> ((1 + 3) - 5)#( 1 + 20.0f-SmallInteger maxVal decimalDigitLength >>> 19%(3.1479 roundDownTo: 0.005) >>> 3.145foo*232('abddf bcdef' indexOf: $a startingAt: 100 ) >>> 098indexOf: anElement startingAt: start ifAbsent: exceptionBlock "Answer the index of the first occurrence of anElement after start within the receiver. If the receiver does not contain anElement, answer the result of evaluating the argument, exceptionBlock." "(#(a b c d e) indexOf: #c startingAt: 2 ifAbsent: 7) >>> 3" "(#(a b c d e) indexOf: #c startingAt: 4 ifAbsent: 7) >>> 7" start to: self size do: [:index | (self at: index) = anElement ifTrue: [^ index]]. ^ exceptionBlock value140zwithSeparatorsCompacted "Returns a copy of the receiver with each sequence of whitespace (separator) characters replaced by a single space character" "' test ' withSeparatorsCompacted >>> ' test '" "' test test' withSeparatorsCompacted >>> ' test test'" "'test test ' withSeparatorsCompacted >>> 'test test '" self isEmpty ifTrue: [ ^ self ]. ^ self species new: self size streamContents: [:stream | | lastBlank | lastBlank := false. self do: [ :eachChar | lastBlank ifTrue: [ (lastBlank := eachChar isSeparator) ifFalse: [ stream nextPut: eachChar ] ] ifFalse: [ (lastBlank := eachChar isSeparator) ifTrue: [ stream nextPut: $ ] ifFalse: [ stream nextPut: eachChar ] ] ] ]((Color r: 0.5 g: 0.5 b: 1) hue >>> 240.02>Add each element of aCollection at my end. Answer aCollection.4isSeparator "Returns whether the receiver is a separator i.e., a space, tab, lf, cr, and newPage" "Character space isSeparator >>> true" "Character lf isSeparator >>> true" "Character cr isSeparator >>> true" "Character newPage isSeparator >>> true" "Character tab isSeparator >>> true" "$' isSeparator >>> false" | in | ^ (in := self asInteger) == 32 or: [ in == 13 or: [ in == 9 or: [ in == 10 or: [ in == 12 ] ] ] ]bifNil: nilBlock ifNotNil: ifNotNilBlock "If the receiver is not nil, pass it as argument to the ifNotNilBlock block. else execute the nilBlock block" "Might be compiled inline for speed, see RBMessageNode>>#isInlineIfNil" "(nil ifNil: [42] ifNotNil: [:o | o +3 ] ) >>> 42" "(3 ifNil: [42] ifNotNil: [:o | o +3 ]) >>> 6" ^ ifNotNilBlock cull: self 30XX1 foo 2between: #(nil 1)113abcdf10092r10000 ^ n 01.1.1a3123abcMReturn whether the receiver is https://www.compart.com/en/unicode/category/PiAnswer an instance of me containing the same associations as the argument. If the same key appears twice, the last one enumerated will win7(#(a b c d e) indexOfAnyOf: #(x y z) ifAbsent: 7) >>> 732toLowercase: aCharacter "(AsciiCharset toLowercase: $A) >>> $a." "(AsciiCharset toLowercase: $a) >>> $a." "(AsciiCharset toLowercase: $!) >>> $!" (aCharacter between: $A and: $Z) ifFalse: [ ^ aCharacter ]. ^ Character value: aCharacter asciiValue + $a asInteger - $A asIntegertFold the result of the receiver from left to right into aBlock. The argument aBlock must take two or more arguments.2-Tests-10.00.50048875855327471.034|piecesCutWhere: binaryBlock "Answer substrings of the receiver derived from cutting the receiver at points where binaryBlock answers true for adjacent elements." "( #(1 2 3 1 6 1 2 3 4) piecesCutWhere: [ :a :b | a = 1 and: [ b = 2]]) asArray >>> #(#(1) #(2 3 1 6 1) #(2 3 4))" | pieces | pieces := OrderedCollection new. self piecesCutWhere: binaryBlock do: [ :piece | pieces add: piece ]. ^pieces "'Now is the time for all good people to come to the aid of the cause of world peace. It is just fine, even desirable, to love your country, if that means wanting it to play a beneficial role in the course of world events and be the best possible example of a good society. But if it means wanting dominion over the rest of the world, it is not love but defensiveness or self-glorification, and will lead only to oblivion.' piecesCutWhere: [:a :b| a = $. and: [b isSeparator]]"::325565Store value into the index'th element of the receiver. If index is out of bounds, let it wrap around from the end to the beginning until it is in bounds. Answer value.1abc98decimalDigitLength "Answer the number of digits printed out in base 10. Note that this only works for positive SmallIntegers up to 64-bits." "1 decimalDigitLength >>> 1" "100000000 decimalDigitLength >>> 9" "SmallInteger maxVal decimalDigitLength >>> 19" ^self < 10000 ifTrue: [self < 100 ifTrue: [self < 10 ifTrue: [1] ifFalse: [2]] ifFalse: [self < 1000 ifTrue: [3] ifFalse: [4]]] ifFalse: [self < 100000000 ifTrue: [self < 1000000 ifTrue: [self < 100000 ifTrue: [5] ifFalse: [6]] ifFalse: [self < 10000000 ifTrue: [7] ifFalse: [8]]] ifFalse: [self < 1000000000000 ifTrue: [self < 10000000000 ifTrue: [self < 1000000000 ifTrue: [9] ifFalse: [10]] ifFalse: [self < 100000000000 ifTrue: [11] ifFalse: [12]]] ifFalse: [self < 10000000000000000 ifTrue: [self < 100000000000000 ifTrue: [self < 10000000000000 ifTrue: [13] ifFalse: [14]] ifFalse: [self < 1000000000000000 ifTrue: [15] ifFalse: [16]]] ifFalse: [self < 1000000000000000000 ifTrue: [self < 100000000000000000 ifTrue: [17] ifFalse: [18]] ifFalse: [self < 10000000000000000000 ifTrue: [19] ifFalse: [20]]]]]]3'Refer to the comment in Collection|do:.-2l1-3 *foo*zort 0:00:01:01-103Refer to the comment in Collection>>#select:thenDo:0FFFFFF0vector0si11Esum works with objects that understands + and - messages, like Points00222 #( # ## )-1000.065unzip "Given a collection returns in one pass two collections containing each odd and even elements in respective subcollections" "#(1 2 3 4) unzip first asArray >>> #(1 3)" "#(1 2 3 4) unzip second asArray >>> #(2 4)" | odd even s | s := self size // 2. odd := OrderedCollection new: s. even := OrderedCollection new: s. 1 to: self size do: [ :i | (i \\ 2) = 0 ifTrue: [ even add: (self at: i) ] ifFalse: [ odd add: (self at: i) ] ]. ^ { odd . even } book-result/({1. $a. $a. 3} as: RunArray) runs >>> #(1 2 1)19(#(a b c d e) indexOfAnyOf: #(x y c) startingAt: 2) >>> 3detectMin: aBlock "Evaluate aBlock with each of the receiver's elements as the argument. Answer the element for which aBlock evaluates to the lowest number. If collection empty, return nil." "({ 2@6 . -4@3 . 10@ -3 } detectMin: [ :p | p x ]) >>> (-4@3)" "({ 2@6 . -4@3 . 10@ -3 } detectMin: [ :p | p y ]) >>> (10@ -3)" "('Hello!' detectMin: #asciiValue) >>> $!" | minElement minValue | self do: [:each | | val | minValue == nil ifFalse: [ (val := aBlock value: each) < minValue ifTrue: [ minElement := each. minValue := val]] ifTrue: ["first element" minElement := each. minValue := aBlock value: each]. "Note that there is no way to get the first element that works for all kinds of Collections. Must test every one."]. ^ minElement Not found342421210allButLast "Answer a copy of the receiver containing all but the last element. Raise an error if there are not enough elements." "#(a b c d) allButLast >>> #(a b c)" ^ self allButLast: 1I(#(1 5 10) detectIndex: [ :each | each > 3 ] ifNone: ['Not found']) >>> 2 | | . a: | (100@200) min >>> 100I#(7 42 7 42 9) asOrderedCollection removeDuplicates asArray >>> #(7 42 9)'abc' isByteString >>> true{} asSet = Set new >>> true1z42.573.15 frd th bar2018#(a b c d e) middle >>> #c710?(#(a b c d e) indexOfSubCollection: #(c d) startingAt: 4) >>> 02(#(10 20 30) \\ #(1 3 4.0) >>> #(0 2 2.0)2410vector09201920ha255100220043+(self >> #traitSource) isExtension >>> true6Return number that represents digit at given position.Answer the x coordinate.hello!00010005333344226006;({ 2@6 . -4@3 . 10@ -3 } detectMax: [ :p | p y ]) >>> (2@6)0.5/(nil ifNotNil: [:o | o +3 ] ifNil: [42]) >>> 42BEvaluate the given block, answering its value if the receiver is empty, otherwise answer the receiver. Note that the fact that this method returns its receiver in case the receiver is not empty allows one to write expressions like the following ones: self classifyMethodAs: (myProtocol ifEmpty: [ Protocol unclassified ]) 'abc' = 'def' >>> false'0002345' isAllDigits >>> truepharotFold the result of the receiver from right to left into aBlock. The argument aBlock must take two or more arguments.4b1-1"A" - 1abs-1"B" - 1max:-1"C"2&(AsciiCharset toUppercase: $A) >>> $A.2557{10@20. 30@0} / {1@3. 4.0@1} >>> {(10@(20/3)). (7.5@0)}2004-02-29T13:33:12+02:00 hello worldmake^Append the elements of the argument, aSequenceableCollection, separating them by the receiver.asHexString "Return a string representing the receiver in HEX (i.e., 6 elements in 16 basis)" "(Color red asHexString) >>> 'FF0000'" | s | s := '000000' copy. s at: 1 put: (Character digitValue: ((rgb bitShift: -6 - RedShift) bitAnd: 15)). s at: 2 put: (Character digitValue: ((rgb bitShift: -2 - RedShift) bitAnd: 15)). s at: 3 put: (Character digitValue: ((rgb bitShift: -6 - GreenShift) bitAnd: 15)). s at: 4 put: (Character digitValue: ((rgb bitShift: -2 - GreenShift) bitAnd: 15)). s at: 5 put: (Character digitValue: ((rgb bitShift: -6 - BlueShift) bitAnd: 15)). s at: 6 put: (Character digitValue: ((rgb bitShift: -2 - BlueShift) bitAnd: 15)). ^ s4K('Five is {five}.' format: (Dictionary with: #five -> 5)) >>> 'Five is 5.'pppp A XXXXXXX. ^ aX X X 41jA variant of #streamContents: where the initial or even final size is given to optimize memory consumption26(Date year: 2018 month: 9 day: 28) weekday >>> #Friday1512'' asArray >>> #()2222333#(10 20) size >>> 2 ==> aBlock "The material conditional, also known as the material implication or truth functional conditional. Correspond to not ... or ... and does not correspond to the English if...then... construction. known as: b if a a implies b if a then b b is a consequence of a a therefore b (but note: 'it is raining therefore it is cloudy' is implication; 'it is autumn therefore the leaves are falling' is equivalence). Here is the truth table for material implication: p | q | p ==> q -------|-------|------------- T | T | T T | F | F F | T | T F | F | T " "true ==> [true] >>> true" "true ==> [false] >>> false" "false ==> [true] >>> true" "false ==> [false] >>> true" ^ self not or: [ aBlock value ]g{Round the decimal part of the receiver to be limited to the number of wished decimal. Only leave a fixed amount of decimal.24d@(#(1 3 5 7 11 15 23) findBinaryIndex: [ :arg | 11 - arg ]) >>> 5The low bits table can be obtained with: ((1 to: 8) inject: #[1] into: [:lowBits :rank | (lowBits copy at: 1 put: lowBits first + 1; yourself) , lowBits]) allButFirst.50340:B :Xafoo3zortthenfoo3zort1442140107#(1 2 2 3 1 1 1) asBag asSet >>> #(1 2 2 3 1 1 1) asSetsum "Return the sum (+) of the elements held in the receiver." "Faster than the superclass implementation when you hold many instances of the same value (which you probably do, otherwise you wouldn't be using a Bag)." "#(1 2 2 3 1 1 1) asBag sum >>> 11" | sum first | first := true. contents keysAndValuesDo: [ :value :count | first ifTrue: [ sum := value * count. first := false ] ifFalse: [ sum := sum + (value * count) ] ]. first ifTrue: [ self errorEmptyCollection ]. ^ sum1 1abc200120XXsuuu0301018-isClosePunctuation "Return whether the receiver is one of these characters: )]}" "$a isClosePunctuation >>> false" "$( isClosePunctuation >>> false" "$) isClosePunctuation >>> true" "$] isClosePunctuation >>> true" "$} isClosePunctuation >>> true" ^ self characterSet isClosePunctuation: self1a$({} averageIfEmpty: [0@0]) >>> (0@0)13[Store the elements of valueArray into the slots of this collection selected by indexArray. 3111122004457:Tests-unix-64-SystemCommands-MethodCommands-Tests-Test.xml10x10243c, )(STON fromString: 'Point[1,2]') >>> (1@2)c "a" ^ "b" 5 "c" 2120721432T(#(1 5 10) detectIndex: [ :each | each > 15 ] ifNone: ['Not found']) >>> 'Not found'*(#(1 2 3) reduce: [ :a :b | a + b ]) >>> 6?reject: rejectBlock thenCollect: collectBlock "Optimized implementation" "(#(1 2 3 4 5) reject: #even thenCollect: [:x|x*10]) >>> #(10 30 50)" | newCollection | newCollection := self copyEmpty. self do: [ :e | (rejectBlock value: e) ifFalse: [ newCollection add: (collectBlock value: e) ] ]. ^ newCollection10n((1 to: 12) groupByRuns: [ :each | (each \\ 3) = 0]) >>> #(#(1 2) #(3) #(4 5) #(6) #(7 8) #(9) #(10 11) #(12))compare: aString "Answer a comparison code telling how the receiver sorts relative to aString: 1 - before 2 - equal 3 - after. The collation sequence is ascii with case differences ignored. To get the effect of a <= b, but ignoring case, use (a compare: b) <= 2." "('aa' compare: 'ab') >>> 1" "('aa' compare: 'aa') >>> 2" "('ab' compare: 'aa') >>> 3" ^self compare: aString caseSensitive: falsea := a. [ | a a := a ]. a := ado: elementBlock separatedBy: separatorBlock "Evaluate the elementBlock for all elements in the receiver, and evaluate the separatorBlock between." "(Array streamContents: ([:stream | #(1 2 3) do: [:each | stream nextPut: (each + 10)] separatedBy: [ stream nextPut: 0 ]])) >>> #(11 0 12 0 13)" 1 to: self size do: [:index | index = 1 ifFalse: [separatorBlock value]. elementBlock value: (self at: index)]61"A"true"B"false"C"nil"D"self"E"super"F"thisContext"G"22503230:00:00:01.00133(#(11 22 33) before: 22) >>> 11183eAnswer the next multiple of aNumber toward negative infinity that is nearest the receiver. Examples:32768 bytesCount >>> 2%OrderedCollection new capacity >>> 10-('Hello, World!' reject: #isLetter) >>> ', !'2 10r89 abcdReturns a copy of the receiver with each sequence of whitespace (separator) characters replaced by a single space character3@Pairwise sum of two sequenceable collections of the same length.32IExecute the receiver with one or zero arguments depending on the receiver6598X''''''blast "Answer the last element of the receiver" "#(a b c d e) last >>> #e" ^ self at: self size0$> isControlOther >>> false0Tests-unix-64-System-Finalization-Tests-Test.xml1 + 2 )26('234Whoopie' initialIntegerOrNil >>> 2342104(Array streamContents: [:stream | #(1 2 3 1 6 1 2 3 4) piecesCutWhere: [ :a :b | a = 1 and: [ b = 2]] do: [:each | stream nextPut: each size]]) >>> #(1 5 3)add: newObject "Add a new object at the end of the collection, and returns the object itself" "((OrderedCollection new add: 42; yourself) add: 43; yourself) asArray >>> #(42 43)" "Add returns the object itself" "(OrderedCollection new add: 42) >>> 42" "You may want to use yourself to return the collection itself" "(OrderedCollection new add: 42; yourself) class >>> OrderedCollection" "(OrderedCollection new add: 42; yourself) size >>> 1" ^self addLast: newObject001002201'' isEmpty >>> true3100%tokenish "Answer whether the receiver is a valid token-character -- letter, digit, underscore, or colon." "$' tokenish >>> false" "$: tokenish >>> true" "${ tokenish >>> false" "Character space tokenish >>> false" ^ self isLetter or: [ self isDigit or: [ self = $_ or: [ self = $: ] ] ])See `unescapeCharacter:` for the opposite350#() asByteArray >>> #[]Z{ 1. 2. 3 } asOrderedCollection >>> (OrderedCollection new add: 1; add:2; add:3; yourself)330 'abc' <= 'def' >>> true110vector0*({1 .2 .3 .4} at: 2 incrementBy: 2) >>> 41281bar2{10@20. 30@0} - {0@1. 2@3} >>> {(10@19). (28@ -3)}211098[:a:b]330!(10 printStringBase: 10) >>> '10'162r-00101000 lowBit >>> 4206size "Answer how many elements the receiver contains." "#(10 20) size >>> 2" "#() size >>> 0" "#((())) size >>> 1" "'' size >>> 0" "' ' size >>> 2" "(1 to:10) size >>> 10 " "(1 to:10 by:2) size >>> 5" "(10 to:1) size >>> 0" | tally | tally := 0. self do: [:each | tally := tally + 1]. ^ tally foo | tmp | tmp := 1 . ^ tmp . 203Tests-unix-64-Spec2-Adapters-Morphic-Tests-Test.xml0110.123452006((40@40 scaleTo: 400@400) >>> (10.0@10.0)2000001111112223322107[ 1 + 2g023.4567#[ ]33112002230barXXX4XXXu 1 foo: ; bar4Evaluate aBlock with each of my elements as the argument. Collect the resulting values into a collection that is like me. Answer the new collection. Override superclass in order to use addLast:, not at:put:.20213identityIndexOf: anElement "Answer the index of anElement within the receiver. If the receiver does not contain anElement, answer 0." "(#(a b c d e) identityIndexOf: #c) >>> 3" "(#(a b c d e) identityIndexOf: #x) >>> 0" ^self identityIndexOf: anElement ifAbsent: [0]1 >= aString "Answer whether the receiver sorts after or equal to aString. The collation order is simple ascii (with case differences)." " 'def' >= 'abc' >>> true" " 'def' >= 'def' >>> true" " 'abc' >= 'def' >>> false" ^ (self compare: self with: aString) >= 03010064xy72&('hello' includesAny: 'pwn') >>> false&Character newPage isSeparator >>> true15J (OrderedDictionary new at: #top at: #below1 ifAbsent: [ 1 ]) >>> 1 121224J('bar' asSortedCollection add: $c; yourself) asArray >>> {$a. $b. $c. $r}.20 Answer 1 since receiver is true.2 9 % 4 >>> 1#(10 storeStringBase: 16) >>> '16rA'1210Z(String streamContents: [ :s | 10 printOn: s base: 10 length: 4 padded: true] ) >>> '0010'314'' expandMacros >>> OSPlatform current lineEnding0vector0(Array streamContents: [:stream | #(1 2 3 4) overlappingPairsDo: [:first :second| stream nextPut: (first + second)]]) >>> #(3 5 7)includes: anObject "Answer whether anObject is one of the receiver's elements." "(#(10 20 30) includes: 20) >>> true" "(#(10 20 30) includes: 21) >>> false" "((1 to:9 by:2) includes: 3) >>> true" "((1 to:9 by:2) includes: 4) >>> false" "('Hello' includes: $l) >>> true" "('Hello' includes: $h) >>> false" "({'hello'. 'world'} includes: 'hello') >>> true" "({'hel','lo'. 'world'} includes: 'hello') >>> true" ^ self anySatisfy: [:each | each = anObject]?Evaluating conjunction -- answer false since receiver is false.'1 true false nil self super thisContext.(#(40 41 42) asOrderedCollection at: 3) >>> 42(1 to:10) size >>> 10 41-4*[(#("a"("b"###("c"###["d"]#["e"]["f"]))))]911012*#('a' 'b' 'c') asCommaString >>> 'a, b, c'abc2""""" 14 100000000 average "Calculate the average of a collection, return a CollectionIsEmpty exception if the collection is empty. Look averageIfEmpty: aBlock" "#(2 6 7) average >>> 5 " "#(3 5 7 7) average >>> (11/2) " "{3@5. 7@ -4} average >>> (5@(1/2))" ^ self sum / self size342[(#(1 3 5 7 11 15 23) findBinary: [ :arg | 24 - arg ] ifNone: ['Not found']) >>> 'Not found'00.005abc-4 ||Xu u2#a := a. [ :a | | a a := a ]. a := aincludesSubstring: aString caseSensitive: caseSensitive "Returns whether the receiver contains the argument." "('abcdefgh' includesSubstring: 'de' caseSensitive: false) >>> true" "('abcdefgh' includesSubstring: 'DE' caseSensitive: false) >>> true" "('abcDefgh' includesSubstring: 'De' caseSensitive: true) >>> true" "('abcDefgh' includesSubstring: 'DE' caseSensitive: true) >>> false" ^ (self findString: aString startingAt: 1 caseSensitive: caseSensitive) > 0frednsXn(10 to: 1) isEmpty >>> true3$' isSeparator >>> falseEMight be compiled inline for speed, see RBMessageNode>>#isInlineIfNil3nXsssfredC(DateAndTime fromString: '2004-02-29T13:33:12+02:00') second >>> 126-(#(1 2 2 3 1 1 1) asBag includes: 1) >>> trueAAnswer whether the receiver's final character represents a digit.400 abcabcabc1wReturn the object stored in the second dictionary at secondKey. The second dictionary is accessed via the key firstKey.114XX X n X16r41anAnswer whether the receiver sorts after aString. The collation order is simple ascii (with case differences).3600000002[ ,Tests-unix-64-Calypso-Browser-Tests-Test.xmlPerform an action specified as aBlock to each of the elements of the receiver that have been split using the splitter argument. splitter - can be a subsequence, a Block or a Regex (String receiver only). Any other object used as a splitter is treated as an Array containing that object.0543204111>('Pharo is really super cool' contractTo: 10) >>> 'Phar...ool'd3select: selectBlock thenCollect: collectBlock "Optimized implementation" "(#(1 2 3 4 5) select: #even thenCollect: #negated) >>> #(-2 -4)" "('Hello, World!' select: #isLetter thenCollect: #uppercase) >>> 'HELLOWORLD'" | selectedItems | selectedItems := self copyEmpty. self do: [ :e | (selectBlock value: e) ifTrue: [ selectedItems add: (collectBlock value: e) ] ]. ^ selectedItems1111$beginsWith: prefix caseSensitive: aBoolean "Answer whether the receiver begins with the given prefix string" "IMPLEMENTATION NOTE: following algorithm is optimized in primitive only in case self and prefix are bytes like. Otherwise, if self or prefix are wide strings, then slow version with asLowercase convertation, (primitive is not correct for wide strings)" "('pharo' beginsWith: '' caseSensitive: false) >>> true" "('pharo' beginsWith: 'pharo-project' caseSensitive: false) >>> false" "('pharo' beginsWith: 'phuro' caseSensitive: false) >>> false" "('pharo' beginsWith: 'Pha' caseSensitive: false) >>> true" prefix ifEmpty: [ ^true ]. aBoolean ifTrue: [ ^self beginsWith: prefix ]. self size < prefix size ifTrue: [^ false]. (self class isBytes and: [prefix class isBytes]) ifTrue: [ "Optimized version based on primitive" ^ (self findSubstring: prefix in: self startingAt: 1 matchTable: CaseInsensitiveOrder) = 1 ]. prefix withIndexDo: [ :each :index | (self at: index) asLowercase = each asLowercase ifFalse: [ ^false ] ]. ^true1046112Tests-unix-64-Spec2-Morphic-Backend-Tests-Test.xmlfindBinary: aBlock do: actionBlock ifNone: exceptionBlock "Search for an element in the receiver using binary search. The argument aBlock is a one-element block returning 0 - if the element is the one searched for <0 - if the search should continue in the first half >0 - if the search should continue in the second half If found, evaluate actionBlock with the found element as argument If no matching element is found, evaluate exceptionBlock, with the 'bounding' elements or nil as arguments." "(#(1 3 5 7 11 15 23) findBinary: [ :arg | 11 - arg ] do: [ :found | found ] ifNone: [ :a :b | 'between: ', {a. b} printString ]) >>> 11" "(#(1 3 5 7 11 15 23) findBinary: [ :arg | 12 - arg ] do: [ :found | found ] ifNone: [ :a :b | 'between: ', {a. b} printString ]) >>> 'between: #(11 15)'" "(#(1 3 5 7 11 15 23) findBinary: [ :arg | 0.5 - arg ] do: [ :found | found ] ifNone: [ :a :b | 'between: ', {a. b} printString ]) >>> 'between: #(nil 1)'" "(#(1 3 5 7 11 15 23) findBinary: [ :arg | 25 - arg ] do: [ :found | found ] ifNone: [ :a :b | 'between: ',{a. b} printString ]) >>> 'between: #(23 nil)'" ^ self findBinaryIndex: aBlock do: [ :foundIndex | actionBlock value: (self at: foundIndex) ] ifNone: [ :prevIndex :nextIndex | exceptionBlock cull: (prevIndex > 0 ifTrue: [ self at: prevIndex ]) cull: (nextIndex <= self size ifTrue: [ self at: nextIndex ]) ]third1080011222344566677888899031((STON reader acceptUnknownClasses: true; on: 'FooBarBaz { #foo : 100 }' readStream; next) at: STON classNameKey) >>> #FooBarBaz'for the style (aa max:bb) with no space33(10 to: 5) asArray >>> #()200asHex "'A' asHex >>> '16r41'" "'AA' asHex >>> '16r4116r41'" ^ self species new: self size * 4 streamContents: [ :stream | self do: [ :ch | stream nextPutAll: ch hex ]]isSortedBy: aBlock "Return true if the receiver is sorted by the given criterion." "(#(1 2 3) isSortedBy: [:a :b | a <= b ]) >>> true" "(#(1 2 3) isSortedBy: [:a :b | a >= b ]) >>> false" "(#(xa xc xz xb xy) isSortedBy: #last ascending) >>> false" "(#(xa xb xc xy xz) isSortedBy: #last ascending) >>> true" | lastElm elm | self isEmpty ifTrue: [^ true]. lastElm := self first. 2 to: self size do: [:index | elm := self at: index. (aBlock value: lastElm value: elm) ifFalse: [^ false]. lastElm := elm]. ^ true0vector0asDate "Convert the receiver in a date object." "(DateAndTime fromString: '2019-08-17T13:33:00+02:00') asDate printString >>> (Date newDay: 17 month: 8 year: 2019) printString" ^ Date starting: selffghi1173400PnewFromKeys: keys andValues: values "Create a dictionary from the keys and values arguments which should have the same length." "(Dictionary newFromKeys: #(#x #y) andValues: #(3 6)) >>> (Dictionary new at: #x put: 3; at: #y put: 6 ;yourself)" | dict | dict := self new. keys with: values do: [ :k :v | dict at: k put: v ]. ^ dict20'pppp A ^ 0 | T | t nn. t 0 sssss s a-4 '' expandMacros >>> String lf4Color red green >>> 0.03uAnswer a copy of the receiver containing all but the first element. Raise an error if there are not enough elements.18cumulativeCounts "Answer with a collection of cumulative percents covered by elements so far." "#(1 2 2 3 1 1 1) asBag cumulativeCounts >>> {57.1->1 . 85.7->2 . 100.0->3}" | s n | s := self size / 100.0. n := 0. ^ self sortedCounts asArray collect: [:a | n := n + a key. (n / s roundTo: 0.1) -> a value]a12@Answer whether the receiver's first character represents a digit9sum: aBlock "This is implemented using a variant of the normal inject:into: pattern. The reason for this is that it is not known whether we're in the normal number line, i.e. whether 0 is a good initial value for the sum. Consider a collection of measurement objects, 0 would be the unitless value and would not be appropriate to add with the unit-ed objects." "(#(1 -4 -10 1) sum: #abs) >>> 16" "({1@ -4. -10@1} sum: #abs) >>> (11@5)" "(#() sum: #abs) >>> 0" ^ self sum: aBlock ifEmpty: [ 0 ]65536 == (1 bitShift: 16)5.Tests-unix-64-Roassal-Inspector-Tests-Test.xmlabc((2@2) + 200) >>> (202@202)2truncateTo: aNumber "Answer the next multiple of aNumber toward zero that is nearest the receiver." "(3.1479 truncateTo: 0.01) >>> 3.14" "(3.1479 truncateTo: 0.1) >>> 3.1" "(1923 truncateTo: 10) >>> 1920" "(1929 truncateTo: 10) >>> 1920" "(-1929 truncateTo: 10) >>> -1920" "(3.1479 truncateTo: 0.005) >>> 3.145" "(-3.1479 truncateTo: 0.01) >>> -3.14" ^(self quo: aNumber) * aNumberradiansToDegrees "The receiver is assumed to represent radians. Answer the conversion to degrees." "Float pi radiansToDegrees >>> 180.0" ^self asFloat radiansToDegreesIt is always a number or zero:0vector001(Color fromHexString: 'FFFFFF')>>> (Color white) 9( 1 + 25cbbReturn a SortFunction around the receiver, where the receiver will be used as a unary message to send to both a and b during sorting, and then the result of said send will be collated in ascending order using the <=> method.400223241030002220#(a b c) allButFirst >>> #(b c)0:00:00:01.0022hello$(#(10) averageIfEmpty: [ 0 ]) >>> 101610213333300yc$A hex >>> '16r41'7ifFalse: falseAlternativeBlock ifTrue: trueAlternativeBlock "Answer the value of falseAlternativeBlock. Execution does not actually reach here because the expression is compiled in-line." "(false ifFalse: [ 'That is false!' ] ifTrue: [ 'That is true!' ]) >>> 'That is false!'" ^falseAlternativeBlock value10-11(('hello' intersection: 'world') >>> 'ol' 001000223cc0(#(10 20) asSet copyWith: 20) >>> #(10 20) asSet33!#(1 2 2 3 1 1 1) asBag size >>> 7 pppp Xppp 1.4 rounded >>> 12345.88two1025 Xuuuuuu n uuu n20n sssss n0Xsss#but use sum or inject:into: instead10000000ppp <<<<< XX XX X< 41#(:=aa:=:==bb:==#cc:==)2?({1. 2. 3. 4. 5} shuffleBy: (Random seed: 42)) >>> #(1 2 5 4 3)'('XaX' escapeCharacter: $X) >>> 'XXaXX'0 825307441b:Answer a Point translated by delta (an instance of Point).1220###'hello''world abdhelloabdCAnswer whether all the elements of aCollection are in the receiver.#( 1 51 10 ) range >>> 501fred17216104Put anObject at every one of the receiver's indices.3collect: aBlock as: aClass "Evaluate aBlock with each of the receiver's elements as the argument. Collect the resulting values into an instance of aClass. Answer the resulting collection." "(#(10 15 22 789) collect: [:x | x//10] as: Set) >>> #(1 2 78) asSet" "('hello' collect: #asciiValue as: Array) >>> #(104 101 108 108 111)" ^(aClass new: self size) fillFrom: self with: aBlock310.2ec(42 digitAt: 1 base: 10) >>> 2ynewFromArray: anArray "Fast initialization with the items of a given array. This initializes elements faster that the generic withAll: or newFrom: methods. The main selling point is that dynamic arrays, like {1. 2. 3}, are really fast in Pharo. So other collections can be easily and efficiently initialized with `{1. 2. 3} asFoo` syntax. Important: Subclasses of Collection that redefine withAll: or newFrom: should also redefine this method either by having a proper implementation (specific to Arrays) or by calling the redefined versions of withAll:/newFrom:." "{ 1. 2. 3 } asSet >>> (Set new add: 1; add:2; add:3; yourself)" "{ 1. 2. 3 } asOrderedCollection >>> (OrderedCollection new add: 1; add:2; add:3; yourself)" "{ 1->2. 3->4 } asDictionary >>> (Dictionary new at: 1 put: 2; at: 3 put:4; yourself)" "({ 1. 2. 3 } as: Set) >>> (Set new add: 1; add:2; add:3; yourself)" "({ 1. 2. 3 } as: OrderedCollection) >>> (OrderedCollection new add: 1; add:2; add:3; yourself)" "({ 1->2. 3->4 } as: Dictionary) >>> (Dictionary new at: 1 put: 2; at: 3 put:4; yourself)" | newCollection size | size := anArray size. newCollection := self new: size. " This should be fast: 1. Integer>>to:do: is inlined in the bytecode (no block). 2. The Array>>at: callsite should be monomorph to a primitive method. " 1 to: size do: [ :i | newCollection add: (anArray at: i) ]. ^ newCollection4^ a'See `escapeCharacter:` for the oppositecAnswer whether the receiver begins with the given prefix string. The comparison is case-sensitive.-6 000000020911aAnswer whether the receiver ends with the given prefix string. The comparison is case-sensitive.-(#(10 20 30) includesAll: #(30 40)) >>> false316r00A0104?(#(1 2 3 4 5) select: #even thenCollect: #negated) >>> #(-2 -4)31^(#(1 2 3 4 4 1 2 3 5 6 ) groupByRuns: [ :each | each = 4]) >>> #(#(1 2 3) #(4 4) #(1 2 3 5 6))!Tests-unix-64-Slot-Tests-Test.xmlphuroselect: selectBlock thenCollect: collectBlock "Optimized version of Collection>>#select:thenCollect:" "(#(1 2 3 4) select: [:each | each > 2 ] thenCollect: [:each | each + 10 ]) >>> #(13 14)" | each | ^ self class new: self size streamContents: [ :stream| 1 to: self size do: [ :index | (selectBlock value: (each := self at: index)) ifTrue: [ stream nextPut: (collectBlock value: each) ]]]11112(#(1 'fred' 2 'charlie' 3 'elmer') pairsCollect: [:a :b | b, ' is number ', a printString]) >>> #('fred is number 1' 'charlie is number 2' 'elmer is number 3')c41 a1a1Nonevaluating conjunction. If the receiver is true, answer the value of the argument, alternativeBlock; otherwise answer false without evaluating the argument.C(#(3 4 5) readStreamDo: [ :stream | stream contents ]) >>> #(3 4 5)cfalse | false >>> false'(#(10 20 30) includesAll: #()) >>> true000111111000444444333500412bn ssss;20trim "Trim separators from both sides of the receiving string." "' this string will be trimmed ' trim >>> 'this string will be trimmed'" ^ self trimBoth Hello--world-#Tests-unix-64-Deprecated12-Test.xml20041150"a" #( "b" 1 "c" two "d" ( "e" 3 "f" ) "g" ) "h".foo "a" "b" "c" "d" "e" "f" "g" >[ #( #( #( #[ ] #[ ] #'[' #']' ) ) ) "a" "b" "c" "d" "e" "f" ]03220[1)2]12r00101000 lowBit >>> 40.030 That is true!720[ :a | | a b ]isClassSide "Return true whether the receiver is a metaclass (in a couple class/metaclass sense)." "Point isClassSide >>> false" "Point class isClassSide >>> true" ^self == self classSide20 [ :a ::b | ]$Tests-unix-64-Network-Tests-Test.xml223Replace all occurrences of oldObject with newObject10allButFirst: n "Answer a copy of the receiver containing all but the first n elements. Raise an error if there are not enough elements." "(#(a b c d) allButFirst: 2) >>> #(c d)" "(#(a b c d) allButFirst: 3) >>> #(d)" ^ self copyFrom: n + 1 to: self size351 + 20#(1 2 3 4) selectEveryFirst asArray >>> #(1 3) 2131X Xabcd$A isLetter >>> true10vector020Answer the index of the last occurrence of anElement within the receiver. If the receiver does not contain anElement, answer the result of evaluating the argument, exceptionBlock.1223(0 to: 10 by: 2) last >>> 100Answer the index of the first occurrence of anElement after start within the receiver. If the receiver does not contain anElement, answer 0. 1 sign;;bar100000000000000000022Y({#a. #b. #z. #d. #i. #l} mergeSortFrom: 3 to: 5 by: [ :a :b | a<=b ]) >>> #(a b d i z l)21AAnswer whether the tail end of the receiver is the same as suffix241000022foo < bar: { 1 } > hello 00111111000444444222230055666666676666666865555(1@2) isFloatPoint >>> false13l({10. 20} asOrderedCollection add: 30 withOccurrences: 2; yourself) >>> {10. 20. 30. 30} asOrderedCollectionisCasedLetter "We are sorry but this method is unclear and will probably be removed. This method only returning false." "$a isCasedLetter >>> false" "$A isCasedLetter >>> false" ^ self characterSet isCasedLetter: self'a' asByteArray >>> #[97]i21001051add: newObject after: oldObject "Add the argument, newObject, as an element of the receiver. Put it in the sequence just succeeding oldObject. Answer newObject. Raises an error if oldObject is not found" "(OrderedCollection new add: 41; add: 42 after: 41; yourself) asArray >>> #(41 42)" "(OrderedCollection new add: 41; add: 42 after: 41; add: 43 after: 41; yourself) asArray >>> #(41 43 42)" ^self insert: newObject before: (self find: oldObject) + 13(1 decimalDigitAt: 2) >>> 0Pharo (, { exist ]200110 kkkk XX kkkk,('s' charactersExactlyMatching: 'abc') >>> 030true not >>> false 001022230n sss;X9abccb20aprintOn: aStream delimiter: delimString last: lastDelimString "Print elements on a stream separated with a delimiter between all the elements and with a special one before the last like: 'a, b and c'" "(String streamContents: [:s| { 10. 'hello'. $x } printOn: s delimiter: ', ' last: ' & ']) >>> '10, ''hello'' & $x'" "Note: Feel free to improve the code to detect the last element." | n sz | n := 1. sz := self size. self do: [:elem | n := n + 1. aStream print: elem] separatedBy: [ n = sz ifTrue: [aStream nextPutAll: lastDelimString] ifFalse: [aStream nextPutAll: delimString]]3=Answer a Bag whose elements are the elements of the receiver.s:isAlphaNumeric "Answer whether the receiver is a letter or a digit." "$a isAlphaNumeric >>> true" "$A isAlphaNumeric >>> true" "$' isAlphaNumeric >>> false" "$1 isAlphaNumeric >>> true" "Character space isAlphaNumeric >>> false" ^ self isLetter or: [ self isDigit ]5d7This statement is true!v(String streamContents: [:s| { 10. 'hello'. $x } printOn: s delimiter: ', ' last: ' & ']) >>> '10, ''hello'' & $x'10<1?success:error>30 HELLOWORLD0[booleanAt: byteIndex "Returns the boolean the byte at index byteOffset of this ByteArray represents in the C convention ( A byte representing the 0 integer corresponds to false, while all other integers corresponds to true)." "(#[1 2 0 4] booleanAt: 2) >>> true." "(#[1 2 0 4] booleanAt: 3) >>> false." ^ self boolean8AtOffset: byteIndex - 11210225if it is to be it is up to me0vector0031abcd52`(Color colorFrom: Color blue darker)>>> ((Color r: 0.0 g: 0.0 b: 0.9198435972629521 alpha: 1.0))b101 -9 % 4 >>> 3(true xor: [true]) >>> falsewe10:B :B0kkkkk XX kkkkk/ HHH E1III111111AAA17CBBBCCCOOOCCCCCCMMMCJ NNN 50/Return a copy with the first letter capitalized'h'3elmer>('Pharo is <1s>' expandMacrosWith: 'cool') >>> 'Pharo is cool'-111bar:4qAnswer a Point that is the receiver's x and y floor. Answer the receiver if its coordinates are already integral.xaAnswer a representative sample of the receiver. It raises an error when the collection is empty. This method can be helpful when needing to preinfer the nature of the contents of semi-homogeneous collections.3c4({#hello. #world} identityIncludes: #hello) >>> true$- isDashPunctuation >>> true110#[ 04221 f, o and o15abc30422r x&' 89Ten ' initialIntegerOrNil >>> nil 000102220300d6Answer true if the receiver is equivalent to aBoolean.0c3abcdefgh411022E([:x :y :z | x + y + z] valueWithPossibleArgs: #( 13 12 15)) >>> 40 <({ 2@6 . -4@3 . 10@ -3 } detectMin: [ :p | p x ]) >>> (-4@3)123(Array streamContents: [:stream | 'abcde' combinations: 3 atATimeDo: [:each | stream nextPut: each copy]]) >>> #(#($a $b $c) #($a $b $d) #($a $b $e) #($a $c $d) #($a $c $e) #($a $d $e) #($b $c $d) #($b $c $e) #($b $d $e) #($c $d $e))ifTrue: alternativeBlock "Answer the value of alternativeBlock. Execution does not actually reach here because the expression is compiled in-line." "(true ifTrue: [ 'This statement is true!' ]) >>> 'This statement is true!'" ^alternativeBlock valuez5C#(10 20 10) asOrderedCollection removeAll >>> OrderedCollection new[ :Object | Object + 1 ]Remove each element of aCollection from the receiver. If successful for each, answer aCollection. Otherwise create an error notification. ArrayedCollections cannot respond to this message.1Evaluate aBlock with my elements taken two at a time. If there's an odd number of items, ignore the last one. Allows use of a flattened array for things that naturally group into pairs. See also pairsCollect:-3.14addAll: aCollection "Include all the elements of aCollection as the receiver's elements. Answer aCollection. Actually, any object responding to #do: can be used as argument." "({10. 20} asOrderedCollection addAll: {20. 30. 30. 40.}) >>> {20. 30. 30. 40.}" "({10. 20} asOrderedCollection addAll: {20. 30. 30. 40.}; yourself) >>> {10. 20. 20. 30. 30. 40.} asOrderedCollection" "({10. 20} asSet addAll: {20. 30. 30. 40.}; yourself) >>> {10. 20. 30. 40.} asSet" aCollection do: [ :each | self add: each ]. ^ aCollectionfoo < bar: [ 1 ] > 3 (1 sign);barGraphical User Interface0.0230.01"Character tab isSeparator >>> true2100RReturn all the elements in self that are not in aCollection. Alias of difference:0vector0b1(KeyboardKey fromCharacter: $a) >>> KeyboardKey A42223DAnswer with a collection of elements with counts, sorted by element.Jequals: aDate "Perform a time zone independent comparison of the dates, i.e. only compare day, month and year. To compare with time zones, use #=" "(Date today equals: Date yesterday) >>> false" ^self year = aDate year and: [ self monthIndex = aDate monthIndex and: [ self dayOfMonth = aDate dayOfMonth ] ]*Primitive does not fail properly right now0.01That is false!X X Xb234424Return the object stored in the second dictionary at secondKey. The second dictionary is accessed via the key firstKey. Execute aZeroArgBlock in case one of the key is wrong.We1001060d^Append the elements of the argument, aSequenceableCollection, separating them by the receiver.YCreate a dictionary from the keys and values arguments which should have the same length.Evaluate aBlock for each of the receiver's elements and answer the list of all resulting values flatten one level. Assumes that aBlock returns some kind of collection for each element. optimized version for Sequencable Collection and subclasses implementing #writeStreamc2do4#(#[1 2 0 4] booleanAt: 2) >>> true.12109[descending "Return a SortFunction around the receiver, where the receiver will be used as a unary message to send to both a and b during sorting, and then the result of said send will be collated in descending order using the <=> method." "(#('abc' 'de' 'fghi') sorted: #size descending) >>> #('fghi' 'abc' 'de')" ^self asSortFunction reversed210161014pharo041abc10001piecesCutWhere: binaryBlock do: pieceBlock "Evaluate pieceBlock with substrings of the receiver derived from cutting the receiver at points where binaryBlock answers true for adjacent elements." "(Array streamContents: [:stream | #(1 2 3 1 6 1 2 3 4) piecesCutWhere: [ :a :b | a = 1 and: [ b = 2]] do: [:each | stream nextPut: each size]]) >>> #(1 5 3)" | size lastCut this next | (size := self size) <= 1 ifTrue: [size = 1 ifTrue: [pieceBlock value: self]. ^self]. lastCut := 1. this := self at: 1. 2 to: size do: [:i| next := self at: i. (binaryBlock value: this value: next) ifTrue: [pieceBlock value: (self copyFrom: lastCut to: i - 1). lastCut := i]. this := next]. pieceBlock value: (self copyFrom: lastCut to: size)collect: aBlock "Evaluate aBlock with each of the receiver's elements as the argument. Collect the resulting values into a collection like the receiver. Answer the new collection." "(#(1 2 3) collect: [:each | each + 10]) >>> #(11 12 13) " | newCollection | newCollection := self species new: self size. 1 to: self size do: [:index | newCollection at: index put: (aBlock value: (self at: index))]. ^ newCollection13 | | . :. :a991(true xor: [false]) >>> true'1' asInteger >>> 1(#(1 3 5 7 11 15 23) findBinaryIndex: [ :arg | 12 - arg ] do: [ :found | found ] ifNone: [ :a :b | 'between: ', {a. b} printString ]) >>> 'between: #(5 6)'oReturns a string representation of the receiver in base 16 in a way that executing it will return the receiver.184action0-1H' this string will be trimmed ' trim >>> 'this string will be trimmed''he'llo'5Print inside string quotes, doubling inbedded quotes.Point instanceSide >>> Pointtrue | false >>> true9((1 to: 10 by: 2) sorted: [:a :b| a>=b]) >>> #(9 7 5 3 1)2 foo < bar 1200432G('ab cd ab ef ab' copyReplaceAll: 'ab' with: 'zk') >>> 'zk cd zk ef zk'114916rA 3.141593reject: rejectBlock thenCollect: collectBlock "Optimized version of Collection>>#reject:thenCollect:" "(#(1 2 3 4) reject: [:each | each = 3 ] thenCollect: [:each | each + 10 ]) >>> #(11 12 14)" | each | ^ self class new: self size streamContents: [ :stream| 1 to: self size do: [ :index | (rejectBlock value: (each := self at: index)) ifFalse: [ stream nextPut: (collectBlock value: each) ]]]hello('aa' compare: 'aa') >>> 2asSet "Answer a set with the elements of the receiver." "#(1 2 2 3 1 1 1) asBag asSet >>> #(1 2 2 3 1 1 1) asSet" ^ contents keys asSet334121111103211:1d1115122In strings you can escape { by prefixing it with \*baz*eX(String streamContents: [:s| {10. 'hello'} printElementsOn: s]) >>> '(10 ''hello'')'(1]2)collect: collectBlock thenSelect: selectBlock "Optimized version of Collection>>#collect:thenSelect:" "(#(1 2 3) collect: [:each | each + 10 ] thenSelect: [:each | each even]) >>> #(12)" | each | ^ self class new: self size streamContents: [ :stream | 1 to: self size do: [:index | each := collectBlock value: (self at: index). (selectBlock value: each) ifTrue: [ stream nextPut: each ]]]0 :B | XXXXXXX. b 0'98abc' numericSuffix >>> 0060 0DDD00000EEE04377733888399A0CCC02b1#FFCCAAThis statement is false!42$((1 to:9 by:2) includes: 3) >>> true1* 666 00777020888000III0F9HHH9999DDD9A EEE 151.0303b3c6-Tests-unix-64-System-Benchmark-Tests-Test.xml18022 00000000000Answer the number of days between self and aDate1^ <0000222222266866555mapClass "Return the class of STON maps, Dictionary, a system wide constant" "(STON fromString: '{ #foo : 1 , #bar : 2 }') class >>> STON mapClass" ^ Dictionary0copyWithoutAll: aCollection "Answer a copy of the receiver that does not contain any elements equal to those in aCollection." "('fred the bear' copyWithoutAll: 'aeiou ') >>> 'frdthbr'" "(#(2 3 4 5 5 6 2) copyWithoutAll: (4 to: 10)) >>> #(2 3 2)" ^ self reject: [:each | aCollection includes: each]-9-122230n0XkIf the receiver is not nil, pass it as argument to the ifNotNilBlock block. else execute the nilBlock block300010003343500'"a" [ "b" | "c" x "d" y "e" | "f" ] "g"103hoGReturn a ByteArray containing a GZIP compressed version of the receiverdFoo'Barh!'x isSymbol' findSelector >>> nilb(String streamContents: [:s | 10 timesRepeat: [s nextPutAll: 'foo']] limitedTo: 9) >>> 'foofoofoo'21wfalse. := false#Tests-unix-64-Kernel-Tests-Test.xml([ 12 ] cull: 13)>>> 12 xaeqv: aBoolean "Answer true if the receiver is equivalent to aBoolean." "(false eqv: true) >>> false" "((1 == 1) eqv: true) >>> true" "(( 1 > 2) eqv: false) >>> true" ^ self == aBoolean&('hello' includesAll: 'hop') >>> falseMPrint elements on a stream separated with a delimiter String like: 'a, b, c'3foo <> ::aabc Xuuuuu n&(#(1 2 3 4) intersection: #()) >>> #()e(#('abc' 'de' 'fghi') sorted: (#size collatedBy: [:e|e bitAnd: 1]) , #size) >>> #( 'de' 'fghi' 'abc')let us make seperate stringshex "Returns a string representation of the receiver as hex, prefixed with 16r. DO NOT CHANGE THIS! The Cog VMMaker depends on this." "Consider using any of printStringHex printStringBase: 16 printStringBase: 16 length: 8 padded: true storeStringHex storeStringBase: 16 storeStringBase: 16 length: 11 padded: true" "12 hex >>> '16rC'" "10 hex >>> '16rA'" "-10 hex >>> '-16rA'" ^ self storeStringBase: 1610c({10. 20} asOrderedCollection addIfNotPresent: 30; yourself) >>> ({10. 20. 30} asOrderedCollection)1111-3.147912allButFirst "Answer a copy of the receiver containing all but the first element. Raise an error if there are not enough elements." "#(a b c) allButFirst >>> #(b c)" ^ self allButFirst: 13aF(#(1 2 3 4) collect: [:each | each + 10] from: 2 to: 3) >>> #(12 13) 1142#lfromCharacter: aCharacter "For backwards compatibility mainly. Return the key that should correspond to some character. Handle normal ascii characters and special control keys only (enter, tab space...)" "(KeyboardKey fromCharacter: $a) >>> KeyboardKey A" ^ self keyFromCharacterTable at: aCharacter ifAbsent: [ self named: aCharacter asString asUppercase ]EReturn the HSL saturation of this color, a value between 0.0 and 1.0.{ ^ 1 }. 2. ^ 3T{ 1->2. 3->4 } asDictionary >>> (Dictionary new at: 1 put: 2; at: 3 put:4; yourself) X 72&#(10 20 30) - #(0 1 2) >>> #(10 19 28)131[Answer the ninth element of the receiver. Raise an error if there are not enough elements.'Tests-unix-64-Monticello-Tests-Test.xml+('aBc' asWideString sameAs: 'abc') >>> truew(1929 truncateTo: 10) >>> 1920a2d/(#(1 2 3 4) count: [ :each | each even ]) >>> 21119202000 ee12311"'3.1415' initialIntegerOrNil >>> 3$1 isAlphaNumeric >>> true2r. 330XX X # X # X X\flatCollect: aBlock as: aCollectionClass "Evaluate aBlock for each of the receiver's elements and answer the list of all resulting values flatten one level. Assumes that aBlock returns some kind of collection for each element. Equivalent to the lisp's mapcan" "(#(1 2 3) flatCollect: [:each | { each. each+1 } ] as: Set) >>> #(1 2 3 4) asSet" "(#(65 66 67) flatCollect: [:each | { each asCharacter. each asCharacter asLowercase } ] as: String) >>> 'AaBbCc'" | col | col := OrderedCollection new: self size. self do: [ :each | col addAll: (aBlock value: each) ]. ^ aCollectionClass withAll: col1 That is true! (true ifFalse: [ true ]) >>> nil0(false eqv: true) >>> false#(-3.1479 roundUpTo: 0.01) >>> -3.14one2310vector04%{1@50. 10@ -10. 5@5} range >>> (9@60)001000224452200866667721151findString: substring startingAt: start "Answer the index of the first substring within the receiver, starting at start. If the receiver does not contain substring, answer 0." "('salkjsdlkgfee' findString: 'ee'startingAt: 3) >>> 12" "('salkjsdlkgfee' findString: 'al'startingAt: 3) >>> 0" "('salkjsdlkgfeeal' findString: 'al' startingAt: 1) >>> 2" ^self findString: substring startingAt: start caseSensitive: true3 #(a b c d e f g h ) fifth >>> #e,'th is is2 9 a stRI4' squeezeOutNumber >>> 23(( 1 > 2) eqv: false) >>> true%(AsciiCharset toLowercase: $!) >>> $!8 XXXXXXXXXXXXXn sss'Tests-unix-64-UnifiedFFI-Tests-Test.xml100522(1. 2)3332This statement is true!twoc11cfoo2Flattens a collection of collections (no matter how many levels of collections exist). Strings are considered atoms and, as such, won't be flattened(10 min: 20 max: 5) >>> 10$ isLetter >>> true1pppp 4333326caption301 9/28/20184.0abc3130foo: 112,(#(1 2 3 4 5) beginsWith: #(1 2 3)) >>> true4#EisAllSeparators "Returns whether the receiver is composed entirely of separators i.e., a space, tab, lf, cr, and newPage" "(Character space asString, Character space asString) isAllSeparators >>> true" "(Character space asString, 'a') isAllSeparators >>> false" self do: [ :c | c isSeparator ifFalse: [ ^false ] ]. ^true(Array streamContents: [:s | #(1 'fred' 2 'charlie' 3 'elmer') pairsDo: [:a :b | s nextPut: b; nextPut: a]]) >>> #('fred' 1 'charlie' 2 'elmer' 3):(10 to: 25 by: 5) asCommaStringAnd >>> '10, 15, 20 and 25'1 sign;1/newFrom: aCollection "Answer an instance of me containing the same elements as aCollection." "(Set newFrom: {1. 2. 3}) >>> #( 1 2 3) asSet" "({1. 2. 3} as: Set) >>> #( 1 2 3) asSet" | newCollection | newCollection := self new: aCollection size. newCollection addAll: aCollection. ^ newCollectionAnswer the receiver's element immediately before target. Answer the result of evaluating the exceptionBlock if target is not an element of the receiver, or if there are no elements before it. ('Hello' includes: $h) >>> false3159nEvaluate aBlock with each of the receiver's elements as the argument. Collect the resulting values into self.(((100@201) closeTo: (100@200)) >>> false!(10 beBetween: 12 and: 20) >>> 12O(#(1 2 3) asOrderedCollection collect: [ :v | v * 10 ]) asArray >>> #(10 20 30)-010 hello world!(^1) | T | ^ t.#(10 20 30) / #(1 3 4.0) >>> {10. (20/3). 7.5}12.224541b#h: hue s: saturation v: brightness alpha: alpha "Create a color with the given hue, saturation, brightness, and alpha. Hue is given as the angle in degrees of the color on the color circle where red is zero degrees. Saturation and brightness are numbers in [0.0..1.0] where larger values are more saturated or brighter colors. For example, (Color h: 0 s: 1 v: 1 alpha: 1) is pure red." "(Color h: 0 s: 1 v: 1 alpha: 1) >>> Color red " ^ self basicNew initializeHue: hue saturation: saturation brightness: brightness alpha: alpha ; yourselfselect: selectBlock thenDo: doBlock "Utility method to improve readability. Do not create the intermediate collection." "|s| s:=0. #(11 22 33) select: #odd thenDo: [:x|s:=s+x]. s >>> 44" self do: [: each | ( selectBlock value: each ) ifTrue: [ doBlock value: each ] ]two"('action' alike: 'caption') >>> 5.555 106660077708 AAA@ foo: 5WJust like do: except that the iteration index supplies the second argument to the blockb10isFinalQuote "Return whether the receiver is https://www.compart.com/en/unicode/category/Pf" "$' isFinalQuote >>> false" ^ self characterSet isFinalQuote: selfd(#(1 2 3 4 1 2 3 4 5 6 ) groupByRuns: [ :each | each = 4]) >>> #(#(1 2 3) #(4) #(1 2 3) #(4) #(5 6)).(#(a b c d e) indexOf: #c startingAt: 2) >>> 3026a303(#(2 4) allSatisfy: [ :each | each even ]) >>> true11000090 true >>> true3oops10051That is false!3000010200salkjsdlkgfeesd3000111213141100"""120r(#(1 1 1 10 10 10 100 100 100) groupsOf: 3 atATimeCollect: [ :x | x ]) >>> #(#(1 1 1) #(10 10 10) #(100 100 100))#(#(1 2 3) polynomialEval: 2) >>> 170Tests-unix-64-NumericInterpolator-Tests-Test.xml2({'hel','lo'. 'world'} includes: 'hello') >>> true7raisedTo: aNumber "Answer the receiver raised to aNumber." "(2 raisedTo: 8) >>> 256" "(8 raisedTo: 2) >>> 64" "(2 raisedTo: (1/12)) >>> 1.0594630943592953" "(2 raisedTo: -1) >>> (1/2)" aNumber isInteger ifTrue: [ "Do the special case of integer power" ^ self raisedToInteger: aNumber]. aNumber isFraction ifTrue: [ "Special case for fraction power" ^ self raisedToFraction: aNumber]. self < 0 ifTrue: [ ^ ArithmeticError signal: 'Negative numbers can''t be raised to float powers.' ]. 0 = aNumber ifTrue: [^ self class one]. "Special case of exponent=0" 1 = aNumber ifTrue: [^ self]. "Special case of exponent=1" 0 = self ifTrue: [ "Special case of self = 0" ^ aNumber < 0 ifTrue: [ (ZeroDivide dividend: 1) signal] ifFalse: [ self]]. ^ (aNumber * self ln) exp "Otherwise use logarithms"-42charactersExactlyMatching: aString "Do a character-by-character comparison between the receiver and aString. Return the index of the final character that matched exactly." "('s' charactersExactlyMatching: 'abc') >>> 0" "('fear is the little death that the.' charactersExactlyMatching: 'the') >>> 0" "('fear is the little death that the.' charactersExactlyMatching: 'fear is') >>> 7" | count | count := self size min: aString size. 1 to: count do: [:i | (self at: i) = (aString at: i) ifFalse: [ ^ i - 1]]. ^ count8copyWithout: oldElement "Answer a copy of the receiver that does not contain any elements equal to oldElement." "('fred the bear' copyWithout: $e) >>> 'frd th bar'" "(#(2 3 4 5 5 6) copyWithout: 5) >>> #(2 3 4 6)" "((10 to: 13) copyWithout: 11) >>> #(10 12 13)" ^ self reject: [:each | each = oldElement]4(#(1 3) anySatisfy: [ :each | each even ]) >>> false3 foo < + 1> -1212820TInterpret the receiver pattern (<1p>, <1s>, ...) with argument passed in anArray.0242575!EccentricityThreshhold recipricalPrint elements on a stream separated with a delimiter between all the elements and with a special one before the last like: 'a, b and c'1012#Tests-unix-64-TaskIt-Tests-Test.xml31 slowFactorial >>> 1d16rAFind the index of first character starting at start in aByteString that is included in the receiver. Default is to use a naive algorithm. Subclasses might want to implement a more efficient scheme. Return 0 if not found.%(-3.1479 truncateTo: 0.01) >>> -3.14$0 isDigit >>> true@Add newObject anInteger times to the receiver. Answer newObject.[:a 1]2007Return a color from its RGB components (0 - 1.0 floats)1!sumNumbers: aBlock "This is implemented using a variant of the normal inject:into: pattern that is specific to handling numbers. aBlock is expected to return a number for every element in the collection. Different from the sum: implementation, the default value is zero. While sum: is more general, sumNumbers: is meant to support the most often encountered use case of dealing with numbers." "(#(1 -2 4) sumNumbers: #abs) >>> 7" "(#() sumNumbers: #abs) >>> 0" ^ self inject: 0 into: [ :sum :each | sum + (aBlock value: each) ] 0001112131411 Hello, World!3c720POr it can follow full superclass chain which will ends at Object and ProtoObject24327Answer the previous date whose weekday name is dayName.5$(#() noneSatisfy: ['oops']) >>> true01foo: a x: a y: b [ :a :a :b | | a a b | a + a + b4Special case of exponent=0def1Answer the index of the first occurrence of anElement within the receiver. If the receiver does not contain anElement, answer the result of evaluating the argument, exceptionBlock.9(#(10 20 30 40 50) findLast: [ :each | each > 10 ]) >>> 5IParse and materialize the STON representation in the character readStreamatRandom: aRandom weighting: aBlock "Retrieve an element with a probability related to the weighting block. The block takes an element as argument and provides a positive number as result (the retative weight). An implicit normalization is performed on all weights. Multiple occurences of equal elements multiply the probability to be choosen. Warning: empty collections and negative weights will signal errors." "({'1'. '2'. '3'. '4'} atRandom: (Random seed: -42) weighting: [ :each | each asInteger ]) >>> '4'" "({'1'. '1'. '2'. '1'. '1'} atRandom: (Random seed: -42) weighting: [ :each | each asInteger ]) >>> '1'" | sum | self emptyCheck. sum := self sum: aBlock. sum := sum * aRandom next. self do: [ :each | | weight | weight := aBlock value: each. weight < 0 ifTrue: [ self error: 'Unexpected negative weight' ]. sum := sum - weight. sum <= 0 ifTrue: [ ^ each ] ]. self error: 'This should not happen'U({10. 20} asOrderedCollection add: 30; yourself) >>> {10. 20. 30} asOrderedCollection000rx352ca000stop "Return the stop element of an interval. Pay attention this is not necessary the same as the last element." "(1 to: 10 by: 2) last >>> 9" "(1 to: 10 by: 2) stop >>> 10" ^ stop10, -4This statement is true!bad start index8CroundUpTo: aNumber "Answer the next multiple of aNumber toward infinity that is nearest the receiver." "(3.1479 roundUpTo: 0.01) >>> 3.15" "(3.1479 roundUpTo: 0.1) >>> 3.2" "(1923 roundUpTo: 10) >>> 1930" "(3.1479 roundUpTo: 0.005) >>> 3.15" "(-3.1479 roundUpTo: 0.01) >>> -3.14" ^(self / aNumber) ceiling * aNumber`pathString "Return a string containing the path elements of the receiver, without the 'Path *' part" "((FileSystem workingDirectory / 'book-result' / 'W01-Welcome') relativeToReference: FileSystem workingDirectory) pathString >>> 'book-result/W01-Welcome'" ^String streamContents: [ :stream | self printPathOn: stream delimiter: self delimiter ]1#(1 2 3 4) combinations >>> #(#(1) #(2) #(3) #(4) #(1 2) #(1 3) #(1 4) #(2 3) #(2 4) #(3 4) #(1 2 3) #(1 2 4) #(1 3 4) #(2 3 4) #(1 2 3 4))asSortedCollection "Answer a SortedCollection whose elements are the elements of the receiver. The sort order is the default less than or equal. Note that you should use #sorted if you don't really need a SortedCollection, but a sorted collection." "'bar' asSortedCollection asArray >>> {$a. $b. $r}." "('bar' asSortedCollection add: $c; yourself) asArray >>> {$a. $b. $c. $r}." ^ self as: SortedCollection|escapeCharacter: aCharacter "Returns a copy of the string doubling all occurence of aCharacter." "See `unescapeCharacter:` for the opposite" "('abc' escapeCharacter: $X) >>> 'abc'" "('aXb' escapeCharacter: $X) >>> 'aXXb'" "('XaX' escapeCharacter: $X) >>> 'XXaXX'" "('XXaXbXXcXXXdXX' escapeCharacter: $X) >>> 'XXXXaXXbXXXXcXXXXXXdXXXX'" | result stream | result := WriteStream with: ''. stream := ReadStream on: self. [ stream atEnd ] whileFalse: [ result nextPutAll: (stream upTo: aCharacter). stream peekBack = aCharacter ifTrue: [ result nextPut: aCharacter. result nextPut: aCharacter ] ]. ^ result contents33641squeezeOutNumber "Try to find a number somewhere in this string, as explained in Number>readFrom: this method returns the first number found" "'th is is29 a stRI4' squeezeOutNumber >>> 29" "'th is is2 9 a stRI4' squeezeOutNumber >>> 2" ^ Number squeezeNumberOutOfString: self1(2)0expandMacrosWith: anObject "('Pharo is <1s>' expandMacrosWith: 'cool') >>> 'Pharo is cool'" "('Pharo is <1p>' expandMacrosWith: 'cool') >>> 'Pharo is ''cool'''" ^self expandMacrosWithArguments: (Array with: anObject)XX XX # X # X XH('<1s> vs <1p>' expandMacrosWith: 'it''em') >>> 'it''em vs ''it''''em'''1141fwhatever60foo < 4Answer a SortedCollection whose elements are the elements of the receiver. The sort order is defined by the argument, aSortBlock. Note that it is better to use #sorted if you don't really need a SortedCollection, but a sorted collection!!31112Tests-unix-64-System-OSEnvironments-Tests-Test.xmlReturn a String based on concatenation of positiveNumberString with prefix then padded by 0 is zeroFlag is set for a minimum length.0vector03seconds "2 seconds printString >>> '0:00:00:02'" "(1 minute + 2 seconds) printString >>> '0:00:01:02'" ^ Duration seconds: self(Character delete isControlOther >>> true(Character euro isCurrencySymbol >>> true between: true | true >>> true00000BBB08888888888888880EEE09999999999999990HHH0?Note: Feel free to improve the code to detect the last element.110before: target ifAbsent: exceptionBlock "Answer the receiver's element immediately before target. Answer the result of evaluating the exceptionBlock if target is not an element of the receiver, or if there are no elements before it." "(#(11 22 33) before: 22 ifAbsent: 55) >>> 11" "(#(11 22 33) before: 44 ifAbsent: 55) >>> 55" | index | index := self indexOf: target. ^ (index = 0 or: [index = 1]) ifTrue: [exceptionBlock value] ifFalse: [self at: index - 1]('Hello' includes: $l) >>> true252313Evaluate aBlock for each element and remove all that elements from the receiver for that aBlock evaluates to true. Use a copy to enumerate collections whose order changes when an element is removed (i.e. Sets).10?('<1?success:is error>' expandMacrosWith: false) >>> 'is error';(1 second + 1 milliSecond) printString >>> '0:00:00:01.001'c4 000100020 Pharo is coolAdd the argument, newObject, as an element of the receiver. Put it in the sequence just preceding oldObject. Answer newObject.#( #( 0 1r2 3 )abcor even CollectionsnXn0400awordBefore: anIndex "('word before index' wordBefore: 4) >>> 'word'" "('word before index' wordBefore: 16) >>> 'inde'" | sep tok | tok := false. sep := anIndex. [ sep > 0 and: [ (self at: sep) tokenish ] ] whileTrue: [ tok := true. sep := sep - 1 ]. ^ tok ifTrue: [ self copyFrom: sep + 1 to: anIndex ] ifFalse: [ String new ]'1111' asFourCode >>> 82530744110#(100.1@200.9) ceiling >>> (101@201)^Append the elements of the argument, aSequenceableCollection, separating them by the receiver.{3} median >>> 3lAnswer the character position of the final space or other separator character in the receiver, and 0 if none210 goodby: 2 my: ]Answer the last n elements of the receiver. Raise an error if there are not enough elements.3](Color colorFrom: #(blue darker)) >>> (Color r: 0.0 g: 0.0 b: 0.9198435972629521 alpha: 1.0) 16e1Alias of Collection>>reduce1 max: 2; "e"min: 3X X1MAnswer a String made up from the receiver whose characters are all lowercase.dPerform an action specified as aBlock (with a start and end argument) to each of the indices of the receiver element that have been identified by splitting the receiver using the splitter argument. splitter - can be a subsequence, a Block or a Regex (String receiver only). Any other object used as a splitter is treated as an Array containing that object.158asOpenInterval "Return a new interval representing the open version of the receiver. In other words, the new inteval does not contain the upper and lower boundaries of the receiver " "(1 to: 10) asOpenInterval >>> (2 to: 9)" "(10 to: 1 by: -1) asOpenInterval >>> (9 to: 2)" ^ start + step to: stop - stephello510(#(1 2 3 4) nextToLast) >>> 33cool;Tests-unix-64-NewTools-RewriterTools-Backend-Tests-Test.xml0022226 factorial >>> 720410(false or: [3]) >>> 30#(a b c d e) last >>> #e3Class structural inspection - Class/Metaclass shift1xc50vector0940"" +2Repeatly value aBlock with a single copy of the receiver. Reorder the copy so that aBlock is presented all (self size factorial) possible permutations.qcollect: aBlock into: aCollection "Evaluate aBlock with each of the receiver's elements as the argument. Collect the resulting values into aCollection. Answer aCollection." "({10. 20} collect: [:x|x+1] into: {'a'. 'b'. 'c'}) >>> {11. 21. 'c'.}" "('hello' collect: #asciiValue into: Set new) >>> #(104 101 108 111) asSet" ^aCollection fillFrom: self with: aBlock23c!#(a b c d e f g h ) fourth >>> #d3 fred the bear41"Point class instanceSide >>> Point < aPoint "Answer whether the receiver is above and to the left of aPoint." "((100@200) < (330@400)) >>> true" "((100@200) < (330@100)) >>> false" ^ x < aPoint x and: [y < aPoint y]15;Convert to a ByteArray with the ascii values of the string.#'hello''world 2r3 211003e-(#(1 2 3 4 5) beginsWith: #(0 1 2)) >>> false229(#(w x y z) atPin: 2) >>> #xjnewFromKeys: keys andValues: values "Create a dictionary from the keys and values arguments which should have the same length." "(OrderedDictionary newFromKeys: #(#x #y) andValues: #(3 6)) >>> (OrderedDictionary new at: #x put: 3; at: #y put: 6 ;yourself)" | dict | dict := self new: keys size. keys with: values do: [ :k :v | dict at: k put: v ]. ^ dict546333877729111A0000BB2substrings "Answer an array of non-empty substrings from the receiver separated by one or more whitespace characters." "'let us make seperate strings' substrings >>> #('let' 'us' 'make' 'seperate' 'strings')" ^ self substrings: CSSeparators Xuuuuuu Xuu 3Include all the elements of aCollection as the receiver's elements. Answer aCollection. Actually, any object responding to #do: can be used as argument.30:298911.0%Tests-unix-64-ProfStef-Tests-Test.xml1;b51Tests-unix-64-Collections-Abstract-Tests-Test.xml(('salkjsdlkgfee' findString: 'al') >>> 2NTests-unix-64-Calypso-SystemPlugins-InheritanceAnalysis-Queries-Tests-Test.xml11302=([{} median] on: CollectionIsEmpty do: [ 'oops' ]) >>> 'oops'asValidSelector "Returns a symbol that is a valid selector by removing any space or forbidden characters" "'234znak ::x43 '') _ : 2' asValidSelector >>> #'v234znak:x43:v2'" "'234znak ::x43 ) :2' asValidSelector >>> #v234znak:x43:v2" ^((( $: join: ( ( $: split: ( self select: [ :char | (char charCode < 128) and: [ char isAlphaNumeric or: [ char = $: ] ] ] ) ) select: [ :split | split isNotEmpty ] thenCollect: [ :nonEmptyString | nonEmptyString first isLetter ifTrue: [ nonEmptyString uncapitalized ] ifFalse: [ 'v' , nonEmptyString ] ] ) ) ifEmpty: [ 'v' ]), ((self isNotEmpty and: [ self last = $: ]) ifTrue: [ ':' ] ifFalse: [ #() ]) )asSymbol11xbclassSide "Return the metaclass of the couple class/metaclass. Useful to avoid explicit test." "Point classSide >>> Point class" "Point class classSide >>> Point class" ^ self subclassResponsibility1024502@({10. 20} asOrderedCollection add: 30 withOccurrences: 2) >>> 302c320abc&(#(a b c d) at: 5 ifAbsent: #z) >>> #z0.01#(1 -2 -4 0) abs >>> #(1 2 4 0) || a13322Evaluate aBlock with each of the receiver's elements as the argument. This is the general foreach method, but for most standard needs there is often a more specific and simpler method.| T | 0 t nn 0. ^ tP(#(1 2 3) flatCollect: [:each | { each. each+1 } ] as: Set) >>> #(1 2 3 4) asSetlast: n "Answer the last n elements of the receiver. Raise an error if there are not enough elements." "(#(a b c d e) last: 2) >>> #(d e)" "(#(a b c d e) last: 3) >>> #(c d e)" | size | size := self size. ^ self copyFrom: size - n + 1 to: size20That is false!102% aNumber "modulo. Remainder defined in terms of //. Answer a Number with the same sign as aNumber." "9 % 4 >>> 1" "-9 % 4 >>> 3" "9 % -4 >>> -3" ^ self \\ aNumber*(#(a b c d) after: #b ifAbsent: #z) >>> #c00001disByteString "Answer whether the receiver is a ByteString" "'abc' isByteString >>> true" ^ truedo311+(#(a b c d e) indexOfAnyOf: #(x y c)) >>> 3jIf the receiver is true (i.e., the condition is true), then answer the value of the argument trueAlternativeBlock. If the receiver is false, answer the result of evaluating the argument falseAlternativeBlock. If the receiver is a nonBoolean then create an error notification. Execution does not actually reach here because the expression is compiled in-line.21pppp AAAAA ^ aaaaa s n 100000000.01qselectEveryFirst "#(1 2 3 4) selectEveryFirst asArray >>> #(1 3) " ^ self selectEvery: [ :i | (i+1 \\ 2) = 0 ]308Tests-unix-64-Refactoring-Transformations-Tests-Test.xmlAnewFrom: aCollection "Answer an instance of me containing the same elements as aCollection." "(RunArray newFrom: {1. $a. $a. 3}) >>> ({1. $a. $a. 3} as: RunArray)" "({1. $a. $a. 3} as: RunArray) values >>> #(1 $a 3)" "({1. $a. $a. 3} as: RunArray) runs >>> #(1 2 1)" | runs values lastRun lastValue | runs := (Array new: aCollection size // 2) writeStream. values := (Array new: aCollection size // 2) writeStream. lastRun := 0. lastValue := Object new. aCollection do: [ :x | lastValue = x ifTrue: [ lastRun := lastRun + 1 ] ifFalse: [ lastRun > 0 ifTrue: [ runs nextPut: lastRun. values nextPut: lastValue ]. lastRun := 1. lastValue := x ] ]. lastRun > 0 ifTrue: [ runs nextPut: lastRun. values nextPut: lastValue ]. ^ self basicNew setRuns: runs contents setValues: values contents({1. 2} asBag = {1. 2. 3} asBag >>> false2p( #(1 2 3 1 6 1 2 3 4) piecesCutWhere: [ :a :b | a = 1 and: [ b = 2]]) asArray >>> #(#(1) #(2 3 1 6 1) #(2 3 4))6XaX100002$' isEnclosingMark >>> falsefrom: startIndex to: endIndex put: anObject "Put anObject in all indexes between startIndex and endIndex. Very fast. Faster than to:do: for more than 26 positions. Answer anObject" "({#a. #b. #c. #d. #e} from: 3 to: 4 put: #x; yourself) >>> #(a b x x e)" | written toWrite thisWrite | startIndex > endIndex ifTrue: [^self]. self at: startIndex put: anObject. written := 1. toWrite := endIndex - startIndex + 1. [written < toWrite] whileTrue: [ thisWrite := written min: toWrite - written. self replaceFrom: startIndex + written to: startIndex + written + thisWrite - 1 with: self startingAt: startIndex. written := written + thisWrite ]. ^anObject2$a isCasedLetter >>> false112.01e|:aoflatCollectAsSet: aBlock "Evaluate aBlock for each of the receiver's elements and answer the list of all resulting values flatten one level. Assumes that aBlock returns some kind of collection for each element. Equivalent to the lisp's mapcan" "( #(1 2 3) flatCollectAsSet: [:each | { each. each+1 } ] ) >>> #(1 2 3 4) asSet" ^ self flatCollect: aBlock as: SetFor backwards compatibility mainly. Return the key that should correspond to some character. Handle normal ascii characters and special control keys only (enter, tab space...)-16rAdo: aBlock without: anItem "Enumerate all elements in the receiver. Execute aBlock for those elements that are not equal to the given item" "Refer to the comment in Collection|do:." "(Array streamContents: ([:stream | #(1 2 3) do: [:each | stream nextPut: (each + 10)] without: 2])) >>> #(11 13)" 1 to: self size do: [:index | anItem = (self at: index) ifFalse:[aBlock value: (self at: index)]]20130vector0word before index5203#('a') asCommaString >>> 'a'1-3howManyMatch: string "Count the number of characters in a substring that matches up in self and aString." "('ab ab ac de' howManyMatch: 'ab') >>> 2" "('abab ac de' howManyMatch: 'abab') >>> 4" "('ab ab ac de' howManyMatch: 'a') >>> 1" "('ab ab ac de' howManyMatch: 'z') >>> 0" | count shorterLength | count := 0. shorterLength := self size min: string size. 1 to: shorterLength do: [:index | (self at: index) = (string at: index ) ifTrue: [ count := count + 1 ]]. ^ count2e1(#(1 2 3) isSortedBy: [:a :b | a <= b ]) >>> truesAnswer whether the receiver includes, anywhere in its nested structure, a string that has testString as a substring<(1000 * 1000 * 1000) humanReadableSISizeString >>> '1.00 GB'100ifEmpty: aBlock "Evaluate the given block, answering its value if the receiver is empty, otherwise answer the receiver. Note that the fact that this method returns its receiver in case the receiver is not empty allows one to write expressions like the following ones: self classifyMethodAs: (myProtocol ifEmpty: [ Protocol unclassified ])" "(#(1 2) ifEmpty: [0]) >>> #(1 2)" "(#() ifEmpty: [0]) >>> 0" "('' ifEmpty: ['(nil)']) >>> '(nil)'" ^ self isEmpty ifTrue: [ aBlock value ] ifFalse: [ self ] 0 odd >>> false3&#(0 1 2) + #(10 20 30) >>> #(10 21 32)3213035*streamContents: blockWithArg "Build an instance of the receiver by writing elements to a stream. More specifically: blockWithArg will be given a WriteStream on an instance of the receiver. Inside blockWithArg you write elements to the stream to build up the collection. At the end, the contents of the stream up to that point will be returned. Note that the underlying collection grows as needed." "(Array streamContents: [ :out | out nextPut: 1; nextPutAll: #(2 3 4); nextPut: 5 ]) >>> #(1 2 3 4 5)" ^ self new: 100 streamContents: blockWithArg-4111033.145ddmmyyyy "Print the receiver in standard French format dd/mm/yyyy." "(Date year: 2018 month: 9 day: 28) ddmmyyyy >>> '28/9/2018'" ^ self printFormat: #(1 2 3 $/ 1 1)sign "Answer 1 if the receiver is greater than 0, -1 if less than 0, else 0." "#(5 -3.7 0) sign >>> #(1 -1 0)" "{5@0. -3@8. 0@ -1.} sign >>> {(1@0). (-1@1). (0@ -1)}" ^ self collect: [ :each | each sign ]x-1a5 . :200002222222667665552Evaluate aBlock for each of the receiver's elements and answer the list of all resulting values flatten one level. Assumes that aBlock returns some kind of collection for each element. Equivalent to the lisp's mapcan114125522 0:B| ||b04 slowFactorial >>> 2418reject: rejectBlock "Optimized version of Collection>>#reject:" "(#(1 2 3 4) reject: [:each | each = 3 ]) >>> #(1 2 4)" | each | ^ self class new: self size streamContents: [ :stream| 1 to: self size do: [ :index | (rejectBlock value: (each := self at: index)) ifFalse: [ stream nextPut: each ]]]9Print the receiver in standard French format dd/mm/yyyy.191.3(1 to: 10 by: 2) last >>> 91. "a" "b" "c" 2 "d"apha~normalizeCamelCase " 'TheRollingStones' normalizeCamelCase >>> 'The Rolling Stones' " ^ self class streamContents: [ : stream | self do: [ : char | (char isUppercase and: [ (stream position > 0 and: [ stream peekLast isUppercase not ]) and: [ stream peekLast isSpaceSeparator not ] ]) ifTrue: [ stream nextPut: Character space ]. stream nextPut: char ] ]/('hello' surroundedBy: 'abd') >>> 'abdhelloabd'QAnswer the next multiple of aNumber toward infinity that is nearest the receiver.1000011411printElementsOn: aStream "List elements betwen () and separated by spaces. Is used by printOn: and other related printing methods." "(String streamContents: [:s| {10. 'hello'} printElementsOn: s]) >>> '(10 ''hello'')'" "(String streamContents: [:s| #() printElementsOn: s]) >>> '()'" "Note: The original code used #skip:, but some streams do not support that, and we don't really need it." aStream nextPut: $(. self do: [:element | aStream print: element] separatedBy: [aStream space]. aStream nextPut: $)4(10 to: 25 by: 5) asCommaString >>> '10, 15, 20, 25'25MPairwise integer quotient of two sequenceable collections of the same length. """ ppp """ n """. """ ^ n """ 1abs "Answer a Point whose x and y are the absolute values of the receiver's x and y." "(100 @ -200) abs >>> (100@200)" ^ x abs @ y absa:foo2021VChroma is zero for black and white, which are the two cases of division by zero below. between: c6420la7206A variant of #streamContents: with a strict size limitc-2sInclude anObject as one of the receiver's elements, but only if there is no such element already. Anwser anObject.110102000111213441511(true and: [false]) >>> false2410|odd " 0 odd >>> false" " 2 odd >>> false" "-2 odd >>> false" " 3 odd >>> true" "-3 odd >>> true" ^(self bitAnd: 1) = 1[ :self | self + 1 ]31foo4 first element510vector01[ :a | bXX n # n 16r80000000footrue & false >>> falseoops(false and: [true]) >>> false12Answer the set theoretic union of two collections.0vector0\\ aNumber "modulo. Remainder defined in terms of //. Answer a Number with the same sign as aNumber." "9 \\ 4 >>> 1" "-9 \\ 4 >>> 3" "9 \\ -4 >>> -3" ^self - (self // aNumber * aNumber)gfoo < bar ; baz > 8((0@0 corner: 100@100) containsPoint: 100@100) >>> false3NB: this implementation only works for Array, since WriteStreams only work for Arrays and Strings. (!) Overridden in OrderedCollection and SortedCollection.2addAll: aCollection "Add each element of aCollection at my end. Answer aCollection." "(OrderedCollection new addAll: #(41 42); yourself) asArray >>> #(41 42)" ^ self addAllLast: aCollection233 0000000000002%(STON toString: 1@2) >>> 'Point[1,2]'Answer with the value of trueAlternativeBlock. Execution does not actually reach here because the expression is compiled in-line.%#(0 1 2) * #(10 20 30) >>> #(0 20 60)isDecimalDigit "Return whether the receiver is a digit." "$1 isDecimalDigit >>> true" "$0 isDecimalDigit >>> true" ^ self characterSet isDecimalDigit: selfXXXs011.23412"(true or: [Error signal]) >>> true2But use sum or sum: instead!'('pharo' beginsWith: 'phuro') >>> false121322' ' isEmpty >>> false6('pharo' beginsWith: '' caseSensitive: false) >>> trueb1Snick100"(3.1479 roundUpTo: 0.005) >>> 3.15112010303.14793oops60foo < bar: 1 1 > 74?Optimized version of SequenceableCollection>>#withIndexSelect: lselect: aBlock "Evaluate aBlock with each of the receiver's elements as the argument. Collect into a new collection like the receiver, only those elements for which aBlock evaluates to true. Answer the new collection." "(#(1 2 3 4 5) select: #even) >>> #(2 4)" "({1@2. 6@3. 2@ -1.} select: [:e| e x > e y]) >>> {(6@3). (2@ -1)}" "('heLlo wOrLd' select: #isUppercase) >>> 'LOL'" "((1 to: 10) select: #isPrime) >>> #(2 3 5 7)" "(#() select: [true]) >>> #()" | newCollection | newCollection := self copyEmpty. self do: [ :each | (aBlock value: each) ifTrue: [ newCollection add: each ] ]. ^ newCollection!(3.1479 truncateTo: 0.1) >>> 3.10101009Answers a Dictionary based on collection of Associations.associationsDo: aBlock "Evaluate aBlock for each of the receiver's elements (key/value associations). If any non-association is within, the error is not caught now, but later, when a key or value message is sent to it. The point of this method it to do the *right thing* on Dictionaries and related classes. " "(String streamContents: [:s| {'one'->1. 'two'->2} associationsDo: [:a| s << a key << ':' << a value asString << ';']]) >>> 'one:1;two:2;'" "(String streamContents: [:s| {'one'->1. 'two'->2} asOrderedDictionary associationsDo: [:a| s << a key << ':' << a value asString << ';']]) >>> 'one:1;two:2;'" self do: aBlock0""" 00 """ n """ ### """ 1 """ n """ 1 """ 0 """*Tests-unix-64-SortFunctions-Tests-Test.xmlReturn a Point scalefactor for shrinking a thumbnail of the receiver's extent to fit within anExtent. self and anExtent are expected to have positive nonZero x and y.a'0abc' startsWithDigit >>> truecXX n n [ 1 }. 2 ]65536201042;Tests-unix-64-System-BasicCommandLineHandler-Tests-Test.xml1:(#(2 3 4 5 5 6 2) copyWithoutAll: (4 to: 10)) >>> #(2 3 2)afromHexString: aColorHex "Returns a color instance from HEX (6 element elements)." "(Color fromHexString: 'FFFFFF')>>> (Color white) " | green red blue alpha hexString | hexString := aColorHex withoutPrefix: '#'. red := (Integer readFrom: (hexString first: 2) base: 16) / 255. green := (Integer readFrom: (hexString copyFrom: 3 to: 4) base: 16) / 255. blue := (Integer readFrom: (hexString copyFrom: 5 to: 6) base: 16) / 255. alpha := hexString size = 8 ifFalse: [ 1.0 ] ifTrue: [ (Integer readFrom: (hexString copyFrom: 7 to: 8) base: 16) / 255 ]. ^ self r: red g: green b: blue alpha: alpha$('pharo' beginsWith: 'pha') >>> true20Hello400[u XXXXX3'1234' asFourCode >>> 825373492a := a. [ :a | [ :a | ]. a := a25eEvaluate the elementBlock for all elements in the receiver, and evaluate the separatorBlock between.-53-4removeAll "Remove each element from the receiver and leave it empty. ArrayedCollections cannot respond to this message. There are two good reasons why a subclass should override this message: 1) the subclass does not support being modified while being iterated 2) the subclass provides a much faster way than iterating through each element" "#(10 20 10) asOrderedCollection removeAll >>> OrderedCollection new" self do: [:each | self remove: each]100rgbTriplet "Returns an array composed of the three color float components." "Color black rgbTriplet >>> #(0.0 0.0 0.0)" "Color red rgbTriplet >>> #(1.0 0.0 0.0)" ^ Array with: (self red roundTo: 0.01) with: (self green roundTo: 0.01) with: (self blue roundTo: 0.01)101 'h' eighth "Answer the eighth element of the receiver. Raise an error if there are not enough elements." "#(a b c d e f g h ) eighth >>> #h" ^ self at: 8!'ABA' asByteArray >>> #[65 66 65]9(#(1 2 3) reduceLeft: [ :a :b | a - b ])>>> ((1 - 2) - 3)423ec201812(1 minute + 1 second) printString >>> '0:00:01:01''-1' asInteger >>> -10abc427KAnswer with a collection of cumulative percents covered by elements so far.bWeus2(#(1 1 2 2 3 3) runningMax: 3) >>> {2 . 2 . 3 . 3}4S(Date year: 2018 month: 9 day: 28) onPreviousMonth printString >>> '28 August 2018'1306foo ^ [ | a | a := 1. [ :a | a ] value: 10 + a ] valueAbcd23Class structural inspection - Class/Metaclass shift1 nil. := nil a: :foo#() size >>> 0 abab ac de100vector030%(#(a b c d) allButLast: 2) >>> #(a b)3Tests-unix-64-NewTools-Debugger-Fuel-Tests-Test.xml| 14Answer the index'th element of the receiver. If index is out of bounds, let it wrap around from the end to the beginning until it is in bounds.'#(10 20 30) // #(1 3 4.0) >>> #(10 6 7)>asDictionary "Answers a Dictionary based on collection of Associations." "{'one' -> 1. 'two' ->2} asDictionary >>> (Dictionary with: 'one' -> 1 with: 'two' ->2)" "{'two' ->2. 'one' -> 1} asDictionary >>> (Dictionary with: 'one' -> 1 with: 'two' ->2)" "#() asDictionary >>> Dictionary new" ^ self as: Dictionary72"[ :a :a :b | | a a b | a + a + b ]0530 startsWithDigit "Answer whether the receiver's first character represents a digit" "'abc' startsWithDigit >>> false" "'0abc' startsWithDigit >>> true" "'1abc' startsWithDigit >>> true" "'11abc' startsWithDigit >>> true" ^ self size > 0 and: [self first isDigit]0000222 -9 \\ 4 >>> 3 Pharoiscool5(false ifTrue: [ 'This statement is true!' ]) >>> nilxzzzzzstring2TThis is implemented using a variant of the normal inject:into: pattern that is specific to handling numbers. The receiver should include only numbers. Different from the sum implementation, the default value is zero. While sum is more general, sumNumbers is meant to support the most often encountered use case of dealing with numbers.1e1 e14H(#('abc' 'de' 'fghi') sorted: #size descending) >>> #('fghi' 'abc' 'de')2:x "Answer the x coordinate." "(100@200) x >>> 100" ^ x00002222222326685553 [ :a | b ]x0a23 222133344460^Xn6xb#(1)#(2)13.onDo: aBlock "Helper to tranform any `do:`-like method into a generator." "|generator| generator := Generator onDo: [ :doBody | Integer primesUpTo: 10000000 do: doBody ]. (generator next: 5) asArray >>> #(2 3 5 7 11)" ^ self on: [ :generator | aBlock value: [ :arg | generator yield: arg ] ]004460430112dUnexpected token10128( 1. 2 )10-3>(1024 * 1024 * 1024) humanReadableByteSizeString >>> '1.00 GB'hello102374280000023162middle "Answer the middle element of the receiver." "#(a b c d e) middle >>> #c" "#(a b c d) middle >>> #c" ^ self at: self size // 2 + 1 project-pharo23onephuro1.0C(#(1 2 3 4 5) reject: #even thenCollect: [:x|x*10]) >>> #(10 30 50)(#(1 3 5 7 11 15 23) findBinary: [ :arg | 0.5 - arg ] do: [ :found | found ] ifNone: [ :a :b | 'between: ', {a. b} printString ]) >>> 'between: #(nil 1)'is2002010y2keysAndValuesDo: aBlock "Enumerate the receiver with all the keys (aka indices) and values." "(Array streamContents: [:stream | #(10 20 30) keysAndValuesDo: [:key :value | stream nextPut: (key * 2 + value)]]) >>> #(12 24 36)" 1 to: self size do: [:index | aBlock value: index value: (self at: index)] 024(OrderedCollection new add: 42; yourself) size >>> 13def'2' initialIntegerOrNil >>> 2512-44h--stage-name=Tests-unix-64d20:00:00:00.00130!(100.1@200.9) floor >>> (100@200)beBetween: minValue and: maxValue "Answer my value constrained to the interval [minValue ; maxValue] I take care of the situation where minValue > maxValue" "(10 beBetween: 12 and: 20) >>> 12" "(10 beBetween: 20 and: 12) >>> 12" "(13 beBetween: 12 and: 20) >>> 13" "(12 beBetween: 12 and: 20) >>> 12" "(100 beBetween: 12 and: 20) >>> 20" ^ minValue <= maxValue ifTrue: [ (self min: maxValue) max: minValue ] ifFalse: [ (self min: minValue) max: maxValue ]13-234.567)([:x :y | x + y] cull: 3 cull: 2) >>> 5 22z3.1452 0:01:01:0040(2 raisedTo: 8) >>> 256foo:addMonths: monthCount "((Date year: 2018 month: 9 day: 28) addMonths: 3) printString>>> '28 December 2018'" |year month maxDaysInMonth day | year := self year + (monthCount + self monthIndex - 1 // 12). month := self monthIndex + monthCount - 1 \\ 12 + 1. maxDaysInMonth := Month daysInMonth: month forYear: year. day := self dayOfMonth min: maxDaysInMonth. ^ Date year: year month: month day: day0.5#(()) isNotEmpty >>> true102 slowFactorial >>> 2+ 1 foo*baz*zort720182 foo +Tests-unix-64-System-Hashing-Tests-Test.xml##( 0 between: 3 (Color h: 0 s: 1 l: 0.5) >>> (Color r: 1 g: 0 b:0)o (Dictionary new at: #top at: #below1 put: 1; at: #top at: #below1 put: 2; at: #top at: #below1) >>> 2bfromStream: readStream "Parse and materialize the STON representation in the character readStream" "(STON fromStream: 'Point[1,2]' readStream) >>> (1@2)" "FileLocator temp / ('{1}.ston' format: { Time millisecondClockValue }) in: [ :file | file writeStreamDo: [ :out | STON put: 1@2 onStream: out ]. file readStreamDo: [ :in | STON fromStream: in ] ]" ^ (self reader on: readStream) next(('hello' allSatisfy: #isLetter) >>> true('abddf' indexOf: $k) >>> 0 0:01:02:00nsn s nssssn s nssssnnabab ; ; e101.031(KeyboardKey fromCharacter: $a) >>> KeyboardKey A2#(1 2 3) anyOne >>> 116rA22>( #((3 4) (1 2)) flatCollect: [:each | each ] ) >>> #(3 4 1 2)220'a''b'3hel1a100Example of usages:!#(1 2 2 3 1 1 1) asBag sum >>> 11 a, b, c and d10-#foo:bar: keywordsStrict >>> #('foo:' 'bar:')ppp Xu := s:1 e:3 s:6 e:8 s:11 e:11 3013340000222222888884AA1 000022222211(Answer the integer nearest the receiver.d1'Tests-unix-64-Commander2-Tests-Test.xml10#('a') asCommaStringAnd >>> 'a'11(#(16 17 17 16 18 17 18 19 19 19 18 19 19 20 19 20 19 20 20 20 19 20) groupsOf: 7 atATimeCollect: [ :x | x ]) >>> #(#(16 17 17 16 18 17 18) #(19 19 19 18 19 19 20) #(19 20 19 20 20 20 19))1000Missing opener for closer: )hReturn element at indexFromEnd from the last position. atLast: 1 ifAbsent: [] returns the last element 000000000000011213141117666855590-> anObject "Answer an Association between self and anObject" "The following example creates an association whose key is number 1 and value string 'one'." "(1 -> 'one') key >>> 1" "(1 -> 'one') value >>> 'one'" "Note that key and value can be ANY object." ^ Association key: self value: anObject+00BBBBBLLLCMMMDNNNEOOOFPPPGQQQHRRRISSSJTTT01519fold: binaryBlock "Alias of Collection>>reduce" "Evaluate the block with the first two (or more) elements of the receiver, then with the result of the first evaluation and the next element, and so on. Answer the result of the final evaluation. If the receiver is empty, raise an error. If the receiver has a single element, answer that element." "( #('if' 'it' 'is' 'to' 'be' 'it' 'is' 'up' 'to' 'me') fold: [:a :b | a, ' ', b] ) >>> 'if it is to be it is up to me'" ^self reduce: binaryBlock30=Move the element at oneIndex to anotherIndex, and vice-versa.-412*Tests-unix-64-Commander2-UI-Tests-Test.xml191phuro10022MasOrderedCollection "Answer an OrderedCollection whose elements are the elements of the receiver. The order in which elements are added depends on the order in which the receiver enumerates its elements. In the case of unordered collections, the ordering is not necessarily the same for multiple requests for the conversion." "(10 to: 25 by: 5) asOrderedCollection >>> #(10 15 20 25) asOrderedCollection" "'foo' asOrderedCollection = #($f $o $o) asOrderedCollection >>> true" "'foo' asOrderedCollection = #($o $o $f) asOrderedCollection >>> false" ^ self as: OrderedCollection426000022444544499AABAAAECCCCDDAAF99888888777G4433333333H2134 XX XX n n n X2(1 sign: 2);bar-1140050401th is is2 9 a stRI4c0;Message sending and code execution - Runtime and Evaluation1 + 2 ]1/ppp """ < """ <<<< """ n """ << """ n """ < """71035=do: aBlock without: anItem "Enumerate all elements in the receiver. Execute aBlock for those elements that are not equal to the given item" "(String streamContents: [:s | #(10 20 30) do: [:each | s << each asString] without: 20]) >>> '1030'" ^ self do: [ :each | anItem = each ifFalse: [ aBlock value: each ] ] [ :a | 1 ] { 1 }. { 2 }12rcull: firstArg cull: secondArg "Execute the receiver with one or two arguments depending on the receiver" "([:x | x + 1] cull: 13 cull: 12) >>> 14 " "([:x :y | x + y] cull: 3 cull: 2) >>> 5 " ^numArgs < 2 ifTrue: [self cull: firstArg] ifFalse: [self value: firstArg value: secondArg]b9/(#(1 2 3) reduceLeft: [ :a :b | a - b ]) >>> -4Evaluate aBlock with each of the receiver's elements as the argument, starting with the last element and taking each in sequence up to the first. For SequenceableCollections, this is the reverse of the enumeration for do:.4ab.('heLlo wOrLd' select: #isUppercase) >>> 'LOL'3$('foo*baz' match: 'foobaz') >>> true51 a1110, 'hello' & $x, !X#####xz2B('Pharo is <1p>' expandMacrosWith: 'cool') >>> 'Pharo is ''cool'''!#(1 2) asArray == #(1 2) >>> true2d|| ('foo*' match: 'bozo') >>> false20-010AAnswer a Point with coordinates that are the reciprocals of mine.2afindBinaryIndex: aBlock "Search for an element in the receiver using binary search. The argument aBlock is a one-element block returning 0 - if the element is the one searched for <0 - if the search should continue in the first half >0 - if the search should continue in the second half If no matching element is found, raise an error." "(#(1 3 5 7 11 15 23) findBinaryIndex: [ :arg | 11 - arg ]) >>> 5" ^ self findBinaryIndex: aBlock do: [ :found | found ] ifNone: [ self errorNotFound: aBlock ]1G(#(1 2 3 4 5) reduce: [ :a :b :c | a + b + c ]) >>> (1 + 2 + 3 + 4 + 5)addDays: dayCount "((Date year: 2018 month: 9 day: 28) addDays: 3) printString >>> '1 October 2018'" ^ (self asDateAndTime + (dayCount days)) asDate23.5698it210/Tests-unix-64-Metacello-TestsReference-Test.xmlSame as ifTrue:ifFalse:.100oops* 0 0 :BBB : BBB | | TTT TTT | bbb . 0 0 . xy[ "a""b""f" 1. "c" "d" 2 "e" ]201Durstenfeld's version of the Fisher-Yates shuffle6ppp < <<<< n>> nilPThe receiver is assumed to represent radians. Answer the conversion to degrees.120vector010055CCC6667DDD889EEEAAABBFFF03Answer whether the receiver is a letter or a digit.2100000000000000-21000foo2#[ 1 2 ]yGiven a collection returns in one pass two collections containing each odd and even elements in respective subcollectionsdonewFrom: aDictionaryOrCollectionOfAssociations "Answer an instance of me containing the same associations as the argument. If the same key appears twice, the last one enumerated will win" "(Dictionary newFrom: {1->#a. 2->#b. 3->#c}) >>> ({1->#a. 2->#b. 3->#c} asDictionary)" | newDictionary | newDictionary := self new: aDictionaryOrCollectionOfAssociations size. aDictionaryOrCollectionOfAssociations associationsDo: [:x |newDictionary add: x]. ^ newDictionary3.1479113'Return a new IdentitySet based on self. 1 foo: . ^ 213Point[1,/*comment*/2]307That is false!fear is13toUppercase: aCharacter "(AsciiCharset toUppercase: $a) >>> $A." "(AsciiCharset toUppercase: $A) >>> $A." "(AsciiCharset toUppercase: $!) >>> $!" (aCharacter between: $a and: $z) ifFalse: [ ^ aCharacter ]. ^ Character value: aCharacter asciiValue - $a asInteger + $A asInteger00 11 n n n 1 0 book-resultc2131-34000102030.674740942223552610pharo00111110004444422223005566666/('word before index' wordBefore: 16) >>> 'inde'$(#(a b c d) allButFirst: 3) >>> #(d)6bind: aBlock "Extract items from the receiver and use them as arguments of aBlock. Signal an error (ArgumentsCountMismatch) when the arguments count of aBlock does not match the receiver size." "(#(1 2 3) bind: [ :first :second :third | first + second + third ]) >>> 6" ^ aBlock valueWithArguments: self66152325:return myself or a copy shortened by ellipsis to smallSize1siEvaluate aBlock with each of the receiver's elements as the argument. Answer the element for which aBlock evaluates to the lowest number. If collection empty, return nil.1| a | [ a := 10 ]. ^ a5growAtLast "Add new empty slots to the end of array, while keeping the empty slots at the front." "OrderedCollection new capacity >>> 10" "(OrderedCollection new growAtLast; capacity) >>> 20" | newArray | newArray := self class arrayType new: (array size * 2 max: 1). newArray replaceFrom: firstIndex to: lastIndex with: array startingAt: firstIndex. array := newArray[ | 2', otherCollection "Concatenate two Strings or Collections." "#(2 4 6 8) , #(who do we appreciate) >>> #(2 4 6 8 who do we appreciate)" "((2989 storeStringBase: 16) copyFrom: 4 to: 6) , ' boy!' >>> 'BAD boy!'" ^ self copyReplaceFrom: self size + 1 to: self size with: otherCollectionfindBinary: aBlock "Search for an element in the receiver using binary search. The argument aBlock is a one-element block returning 0 - if the element is the one searched for <0 - if the search should continue in the first half >0 - if the search should continue in the second half If no matching element is found, raise an error." "(#(1 3 5 7 11 15 23) findBinary: [ :arg | 11 - arg ]) >>> 11 " ^ self findBinary: aBlock do: [ :found | found ] ifNone: [ self errorNotFound: aBlock ]1ehllo1uminute "1 minute printString >>> '0:00:01:00'" "(1 hour + 1 minute) printString >>> '0:01:01:00'" ^ self minutesb20655052Return a new sequenceable collection which contains the same elements as self but its elements are sorted in ascending order using the #'<=' operator.2r11103That is false!1}Search for an element in the receiver using binary search. The argument aBlock is a one-element block returning 0 - if the element is the one searched for <0 - if the search should continue in the first half >0 - if the search should continue in the second half If no matching element is found, evaluate exceptionBlock, with the 'bounding' elements as optional arguments.(#(w x y z) atPin: 4) >>> #z200phuro22^ @002(Array streamContents: [:stream | #(10 20 30) keysAndValuesDo: [:key :value | stream nextPut: (key * 2 + value)]]) >>> #(12 24 36)((FileSystem workingDirectory / 'book-result' / 'W01-Welcome') relativeToReference: FileSystem workingDirectory) pathString >>> 'book-result/W01-Welcome'>mmddyyyy "Print the receiver in standard U.S.A format mm/dd/yyyy. Note that the name here is slightly misleading -- the month and day numbers don't show leading zeros, so that for example February 1 1996 is 2/1/96" "(Date year: 2018 month: 9 day: 28) mmddyyyy >>> '9/28/2018'" ^ self printFormat: #(2 1 3 $/ 1 1)abcd3b5400 X Xd1 foo. 2(false xor: [true]) >>> true33f0>> falsee200floor "Answer a Point that is the receiver's x and y floor. Answer the receiver if its coordinates are already integral." "(100@200) floor >>> (100@200)" "(100.1@200.9) floor >>> (100@200)" self isIntegerPoint ifTrue: [ ^ self ]. ^ x floor @ y floor0{0@1. 2@3} + {10@20. 30@0} >>> {(10@21). (32@3)}Foo0rNonevaluating conjunction. Answer the opposite of the the argument, alternativeBlock; since the receiver is true. 00000000200000fReturn index of first element that satisfies aBlock. If no matching element is found, raise an error.$h. $wcopyWith: newElement "Answer a new collection with newElement added (as last element if sequenceable)." "(#(10 20) asSet copyWith: 30) >>> #(10 20 30) asSet" "(#(10 20) asSet copyWith: 20) >>> #(10 20) asSet" ^ self copy add: newElement; yourself#Float pi radiansToDegrees >>> 180.0!'ABA' asByteArray >>> #[65 66 65]1101075(Array streamContents: [:stream | #(10 20 30 40) overlappingPairsWithIndexDo: [:first :second :index| stream nextPut: (first + second + index)]]) >>> #(31 52 73)asByteArray "Convert to a ByteArray with the ascii values of the string." "'a' asByteArray >>> #[97]" "'A' asByteArray >>> #[65]" "'ABA' asByteArray >>> #[65 66 65]" self subclassResponsibility10d1('ab' compare: 'aa') >>> 3M(Character space asString, Character space asString) isAllSeparators >>> true3Perform an action specified as aBlock (with a start and end argument) to each of the indices of aSequenceableCollection that have been identified by taking the receiver as a splitter.Point instanceSide >>> PointE(RubTextEditor new surroundString: 'a' withCharacter: $') >>> '''a''':metaLevelForHierarchyOf: aClass "Subclasses should decide what meta level of given class should be used to retrieve/build hierarchy. For example superclass hierarchy of ProtoObject class can stop at it according to instance side hierarchy" "ProtoObject superclass >>> nil" "Or it can follow full superclass chain which will ends at Object and ProtoObject" "ProtoObject class superclass >>> Class" "This method adds such decision to concrete kind of local scope which allows to use scopes to restrict visibility of class hierarchy" self subclassResponsibility5Return a String with the STON serialization of objectG(OrderedCollection new addAll: #(41 42); yourself) asArray >>> #(41 42)4#4210vector01b&cull: anArg "Execute the receiver with one or zero arguments depending on the receiver" "([ 12 ] cull: 13)>>> 12 " "([:x | x + 12] cull: 3)>>> 15" ^numArgs = 0 ifTrue: [self value] ifFalse: [self value: anArg]who10102a := a. [ :a | a ]. a := adefXX sss ( 1 ]. 2 )7.5n X01120'((100@200) max: (30@400)) >>> (100@400) MockPackageisEmpty "Answer whether the receiver contains any elements." "{} isEmpty >>> true" "{{}} isEmpty >>> false" "'' isEmpty >>> true" "' ' isEmpty >>> false" "(1 to: 10) isEmpty >>> false" "(10 to: 1) isEmpty >>> true" ^self size = 02{1 . 2 . 4 . 5} median >>> 3301Wargmax "#(1 -3 5 1) argmax >>> 3" "#(1 1 1 1) argmax >>> 1" ^ self indexOf: self max30That is false!211&(OrderedCollection new add: 42) >>> 422100123450541001s1s11:=2/'between:and:' findSelector >>> #'between:and:'"#(a b c d) allButLast >>> #(a b c)640.51 Xuuuuuu Xuu n(1 -> 'one') value >>> 'one'z25 That is true!d1LAnswer whether any element of aCollection is one of the receiver's elements.defPhsvSaturation "Return the HSV saturation of this color, a value between 0.0 and 1.0." "Color red hsvSaturation >>> 1.0" "(Color r: 0.5 g: 0.5 b: 1) hsvSaturation >>> 0.4995112414467253" | max | max := self privateMaxComponent. ^ max isZero ifTrue: [ 0.0 ] ifFalse: [ (max - self privateMinComponent) asFloat / max asFloat ]30End of statement expected53663540422134Tests-unix-64-SUnit-Support-UITesting-Tests-Test.xmlxcabcdeU000022333443355336633773388339933AA33BB33CC33DDD33EEE33FFF33GGG33HHH33III33JJJ333LL33[:a|||a]:a:foo10<(10 storeStringBase: 16 length: 6 padded: true) >>> '16r00A'3013Point classSide >>> Point class16z915(1.3@2.2) isFloatPoint >>> true0X(#(5 6 7 8) asOrderedCollection removeAllSuchThat: #even) >>> #(5 7) asOrderedCollection10y0(1 hour + 1 minute) printString >>> '0:01:01:00'Take the items in the receiver, kk at a time, and evaluate the block for each combination. Hand in an array of elements of self as the block argument. Each combination only occurs once, and order of the elements does not matter. There are (self size take: kk) combinations. ']' expectedS#[ 1 2 3 ] zipped >>> #[31 139 8 0 0 0 0 0 0 0 99 100 98 6 0 29 128 188 85 3 0 0 0]0Tests-unix-64-Collections-Streams-Tests-Test.xml3111120044667685999A4400DBBBBC14?({1. 2. 3. 4. 5} shuffleBy: (Random seed: 42)) >>> #(1 2 5 4 3)#_ asMutator >>> #_:41 001002230pdetect: aBlock "Evaluate aBlock with each of the receiver's elements as the argument. Answer the first element for which aBlock evaluates to true." "({1@3. 2@1. 3@6. 4@8} detect: [ :each | each x even ]) >>> (2@1)" "((104 to: 120) detect: #isPrime) >>> 107" "('Hello!' detect: #isLowercase) >>> $e" ^ self detect: aBlock ifNone: [ self errorNotFound: aBlock ]<<<<>> '0:00:00:02'2EPairwise quotient of two sequenceable collections of the same length.2521010.0[ This implementation is recursive and very canonical. This implementation is intended for demo purposes, but for better performance another version 'factorial' is provided.EAnswer an instance of me containing the same elements as aCollection.3=Tests-unix-64-Calypso-SystemTools-QueryBrowser-Tests-Test.xml5`asDate "(Date year: 2018 month: 9 day: 28) asDate printString >>> '28 September 2018'" ^ self8(-234.567 printShowingDecimalPlaces: 5) >>> '-234.56700'[:a :b]difference: aCollection "Answer the set theoretic difference of two collections. Pay attention that the difference is not commutative, hence the order is important." "(#(a b c d e f) difference: #(a b z k))>>> #(#c #d #e #f)" "(#(a b z k) difference: #(a b c d e f)) >>> #(#z #k)" "('hello' difference: 'aeiou') >>> 'hll'" | set | set := self asSet removeAllFoundIn: aCollection; yourself. ^ self species withAll: set asArray6&Convert the receiver in a date object.1021 '11abc' startsWithDigit >>> trueI({#a. #b. #c. #d. #e} replaceFrom: 3 to: 4 with: #(x y)) >>> #(a b x y e)pharobozo10 abddf bcdef-6Search for an element in the receiver using binary search. The argument aBlock is a one-element block returning 0 - if the element is the one searched for <0 - if the search should continue in the first half >0 - if the search should continue in the second half If found, evaluate actionBlock with the found element as argument If no matching element is found, evaluate exceptionBlock, with the 'bounding' elements or nil as arguments.0H(('asa' , String cr , 'asa') withUnixLineEndings at: 4) >>> Character lf!'' expandMacros >>> String tab79Maybe look at the related method Collection>>inject:into:-0.5hello! X | t t t | t s t s tsplit: aSequenceableCollection indicesDo: aBlock "Perform an action specified as aBlock (with a start and end argument) to each of the indices of aSequenceableCollection that have been identified by taking the receiver as a splitter." "('||' split: 'foo||bar||2')>>>#('foo' 'bar' '2') asOrderedCollection" "(String streamContents: [:s | '||' split: 'foo||bar||2' indicesDo: [ :start :end | s << 's:' << start asString << ' ' << 'e:' << end asString << ' ' ]]) >>> 's:1 e:3 s:6 e:8 s:11 e:11 '" | position oldPosition | position := 1. oldPosition := position. position := aSequenceableCollection indexOfSubCollection: self startingAt: position. [ position > 0 ] whileTrue: [ aBlock value: oldPosition value: position - 1. position := position + self size. oldPosition := position. position := aSequenceableCollection indexOfSubCollection: self startingAt: position. ]. aBlock value: oldPosition value: aSequenceableCollection size34113.14792.302949083493849120a::foo200655057&(#(a b c d) at: 3 ifAbsent: #z) >>> #c0vector033GifNotEmpty: aBlock "Evaluate the given block with the receiver as argument, answering its value unless the receiver is empty, in which case answer the receiver." "(#(10 20) ifNotEmpty: [:x| x average]) >>> 15" "(#() ifNotEmpty: [:x| x average]) >>> #()" ^ self isEmpty ifTrue: [ self ] ifFalse: [ aBlock cull: self ]4242(23.5698 printShowingDecimalPlaces: 2) >>> '23.57'* arg "Pairwise product of two sequenceable collections of the same length." "#(0 1 2) * #(10 20 30) >>> #(0 20 60)" "{0@1. 2@3} * {10@20. 30@0} >>> {(0@20). (60@0)}" ^ arg adaptToCollection: self andSend: #*d9131/Tests-unix-64-Collections-Atomic-Tests-Test.xml1z4 000102330400Undeclared variable1!(#() collect: [:x | x+1]) >>> #()(false xor: [false]) >>> false22Evaluate aBlock with each of the receiver's elements, in reverse order, along with the corresponding element, also in reverse order, from aSequencableCollection. e23^({ 1. 2. 3 } as: OrderedCollection) >>> (OrderedCollection new add: 1; add:2; add:3; yourself))('abab ac de' howManyMatch: 'abab') >>> 423.00XX n9numberOfCombinationsTaken: k "Return the number of combinations of (self) elements taken k at a time. It is calculated as C(n,k) = n! / (k! (n-k)!) For 6 numberOfCombinationsTaken: 3, this is 6*5*4 / (1*2*3)" "(6 numberOfCombinationsTaken: 3) >>> 20" | numerator denominator | k < 0 ifTrue: [^ 0]. k > self ifTrue: [^ 0]. numerator := 1. self to: (k max: self-k) + 1 by: -1 do: [ :factor | numerator := numerator * factor ]. denominator := 1. 1 to: (k min: self-k) do: [ :factor | denominator := denominator * factor ]. ^ numerator // denominator13141034 0:B|||Xb0helde1ab cd ab ef abAnswer substrings of the receiver derived from cutting the receiver at points where binaryBlock answers true for adjacent elements.0includesSubstringAnywhere: testString "Answer whether the receiver includes, anywhere in its nested structure, a string that has testString as a substring" "(#(first (second third) ((allSentMessages ('Elvis' includes:)))) includesSubstringAnywhere: 'lvi') >>> true" self do: [:element | (element isString) ifTrue: [(element includesSubstring: testString) ifTrue: [^ true]]. (element isCollection) ifTrue: [(element includesSubstringAnywhere: testString) ifTrue: [^ true]]]. ^ false01>> 30ZEvaluate aBlock with my elements taken two at a time, and return an Array with the results56ollhereadStreamDo: aBlock "Evaluates the argument with the read stream of the collection. Answers the result." "(#(3 4 5) readStreamDo: [ :stream | stream contents ]) >>> #(3 4 5)" ^ aBlock value: self readStreamThis statement is true!+Tests-unix-64-Tool-Profilers-Tests-Test.xml(#() sum: #abs) >>> 015'(nil)at: index incrementBy: value "({1 .2 .3 .4} at: 3 incrementBy: 2) >>> 5" "({1 .2 .3 .4} at: 2 incrementBy: 2) >>> 4" ^self at: index put: (self at: index) + value2?({#a. #b. #a. #d. #a} replaceAll: #a with: #e) >>> #(e b e d e)15"also unfinished""107''100000000000000010143Hello|| u20b6!""" 0 """ n """ . """ n """ 0 """16rFF#( !(12 beBetween: 12 and: 20) >>> 121bR(OrderedCollection new add: 42; add: 41 before: 42; yourself) asArray >>> #(41 42)+#(1 11 0.5) reciprocal >>> {1 . 1/11 . 2.0}0ppp """ < """ <<< """ < """ < """ <<< """ < """ [:a :]17ifTrue: trueAlternativeBlock ifFalse: falseAlternativeBlock "Answer the value of falseAlternativeBlock. Execution does not actually reach here because the expression is compiled in-line." "(false ifTrue: [ 'That is true!' ] ifFalse: [ 'That is false!' ]) >>> 'That is false!'" ^falseAlternativeBlock value2016rC5This destructively replaces elements from start to stop in the receiver. Answer the receiver itself. Use copyReplaceFrom:to:with: for insertion/deletion which may alter the size of the result.aXbasFourCode "'abcd' asFourCode >>> -513645724" "'1111' asFourCode >>> 825307441" "'1234' asFourCode >>> 825373492" | result | self size = 4 ifFalse: [^self error: 'must be exactly four characters']. result := self inject: 0 into: [:val :each | 256 * val + each asciiValue ]. (result bitAnd: 16r80000000) = 0 ifFalse: [ Error signal: 'cannot resolve fourcode' ]. (result bitAnd: 16r40000000) = 0 ifFalse: [ ^ result - 16r80000000 ]. ^ result(| x "a" "b" "c" | "d" x := 5 "e" "f" "g"7d1a := a. { [ :a | }. a := a78912a2018mobazo/({'hello'. 'world'} includes: 'hello') >>> true1166 progress.log4109.Tests-unix-64-Roassal-Animation-Tests-Test.xmlu u. X X X. X X1Otherwise use logarithmselvis 11021312?(Color r: 0.5 g: 0.5 b: 1) hsvSaturation >>> 0.4995112414467253)({1 .2 .3 .4} at: 3 incrementBy: 2) >>> 5650.0a := a. [ :a a ]. a := a33#( 1 ). #( 2 )@foo2110W(String streamContents: [:s| 'abcd' asStringOn: s delimiter: '->']) >>> 'a->b->c->d'52e3 "nothing" cmilliSeconds "2 milliSeconds printString >>> '0:00:00:00.002'" "(1 second + 2 milliSeconds) printString >>> '0:00:00:01.002'" ^ Duration milliSeconds: self1000reject: aBlock "Evaluate aBlock with each of the receiver's elements as the argument. Collect into a new collection like the receiver only those elements for which aBlock evaluates to false. Answer the new collection." "(#(1 2 3 4 5) reject: #even) >>> #(1 3 5)" "('Hello, World!' reject: #isLetter) >>> ', !'" "((1 to: 8) reject: #isPrime) >>> #(1 4 6 8)" ^ self select: [ :element | (aBlock value: element) == false ]1 "com"1"ment"(#(x y z) atLast: 1) >>> #z;Return whether the receiver is one of these characters: _1200 Point class isClassSide >>> true9(Character space asString, 'a') isAllSeparators >>> false1a3(Color colorFrom: #(1.0 1.0 1.0)) >>> (Color white)2[1}2]'' lastSpacePosition >>> 011_Return the integer present in the receiver, or nil. In case of float, returns the integer part.11(-2.567 printShowingDecimalPlaces: 2) >>> '-2.57'120189Tests-unix-64-NewTools-SpTextPresenterDecorators-Test.xml"000001111111111103355555555555444600indexOfAnyOf: aCollection startingAt: start "Answer the index of the first occurrence of any element included in aCollection after start within the receiver. If the receiver does not contain anElement, answer zero, which is an invalid index." "(#(a b c d e) indexOfAnyOf: #(x y c) startingAt: 2) >>> 3" "(#(a b c d e) indexOfAnyOf: #(x y c) startingAt: 4) >>> 0" ^self indexOfAnyOf: aCollection startingAt: start ifAbsent: [0] #[ 1 a 2 ]11 between: 1abfalse & false >>> false3 ppp < <<<<22x isSymbol: 33Return whether the receiver is one of these characters: backspace, delete, escape, arrowUp, arrowLeft, arrowDown, arrowRight, pageUp, pageDown, end, home, nbsp, inserttrue ==> [true] >>> true(Tests-unix-64-Zinc-Zodiac-Tests-Test.xml12 {1 . 2 . 5 . 5} median >>> (7/2) ||X u46sReturn the index of my first element for which aBlock evaluates as true. If no matching element is found, return 0i308Answer a copy of the receiver in which all occurrences of oldSubstring have been replaced by newSubstring. ifTokens (valid for Strings only) specifies that the characters surrounding the replacement must not be alphanumeric (space). When ifTokens is set, it means that the replacement will not occur inside word.love22(#(1 2 3) isSortedBy: [:a :b | a >= b ]) >>> false003$1 isDecimalDigit >>> true42200420 ab ab ac de5 a->b->c->d234767 X210:B :XX0:p Xsss 0021113*Evaluate aBlock with each of the receiver's elements as the argument. Collect the resulting values into a collection like the receiver. Answer the new collection. Note: the returned collection is of the same species. If this species does not accomdate the values of aBlock, look at collect:as:64113341100500667K(#(1 2 3) asOrderedCollection collect: [ :v | 10 ]) asArray >>> #(10 10 10)1 goodby: 2 my: 5S( #(3 4 1 2) flatCollect: [:each | { each. each*10 } ] ) >>> #(3 30 4 40 1 10 2 20)21[(String streamContents: [ :s | -10 printOn: s base: 10 length: 4 padded: true] ) >>> '-010'printPathOn: aStream delimiter: aCharacter "Print the receiver's path on aStream (without 'Path' prepended)" "(String streamContents: [ :str| ((FileSystem workingDirectory / 'book-result' / 'W01-Welcome') relativeToReference: FileSystem workingDirectory) printPathOn: str delimiter: $|]) >>> 'book-result|W01-Welcome'" (1 to: self size) do: [:index | aStream nextPutAll: (self at: index)] separatedBy: [aStream nextPut: aCharacter]2'bar' asSortedCollection asArray >>> {$a. $b. $r}.1 Phar...ool2MockPackage-Tests-Package0bJust like with:collect: except that the iteration index supplies the second argument to the block.join: aSequenceableCollection "Append the elements of the argument, aSequenceableCollection, separating them by the receiver." "(Character space join: #('Pharo' 'is' 'cool')) >>> 'Pharo is cool'" ^ self asString join: aSequenceableCollection20011010 #[ 1 } 2 ] 0:B|| |b010.160s3| tmp | tmp := 1. ^ tmp30pharo_(#(11 22 33) asOrderedCollection atWrap: 2 put: 0; yourself) >>> #(11 0 33) asOrderedCollectionAnswer a SortedCollection whose elements are the elements of the receiver. The sort order is the default less than or equal. Note that you should use #sorted if you don't really need a SortedCollection, but a sorted collection.3ay34fghi1432120foo: super ^ super + 10.11(But use collect: or collect:as: instead!142* 00000111000222000334443555333666330000 That is true!101(1 hour + 2 minutes) printString >>> '0:01:02:00'1'hello' surroundedBySingleQuotes >>> '''hello'''10005223-2;#+-<> asTestSelector >>> #testPlusMinusLessThanGreaterThan'hello' anyOne >>> $hn s listClass "Return the class of STON lists, Array, a system wide constant" "(STON fromString: '[1 , 2 , 3]') class >>> STON listClass" ^ Array271000vector2102(Color colorFrom: #(0.0 0.0 1.0)) >>> (Color blue)abcdefgh'2345' isAllDigits >>> true1eLiteral constant expected+ foo: 01511020|a:1+^2indeac[(String streamContents: [ :s | -10 printOn: s base: 10 length: 4 padded: true] ) >>> '-010'11colorFrom: parm "Return an instantiated color from parm. If parm is already a color, return it, else return the result of my performing it if it's a symbol or, if it is a list, it can either be an array of three numbers, which will be interpreted as RGB values, or a list of symbols, the first of which is sent to me and then the others of which are in turn sent to the prior result, thus allowing entries of the form #(blue darker). Else just return the thing" "(Color colorFrom: #(blue darker)) >>> (Color r: 0.0 g: 0.0 b: 0.9198435972629521 alpha: 1.0) " "(Color colorFrom: Color blue darker)>>> ((Color r: 0.0 g: 0.0 b: 0.9198435972629521 alpha: 1.0))" "(Color colorFrom: #blue)>>> (Color blue)" "(Color colorFrom: #(0.0 0.0 1.0)) >>> (Color blue)" | aColor firstParm | (parm isKindOf: self) ifTrue: [ ^ parm ]. parm isSymbol ifTrue: [ ^ self perform: parm ]. parm isString ifTrue: [ ^ self fromString: parm ]. ((parm isKindOf: SequenceableCollection) and: [ parm isNotEmpty ]) ifTrue: [ firstParm := parm first. (firstParm isKindOf: Number) ifTrue: [ ^ self fromRgbTriplet: parm ]. aColor := self colorFrom: firstParm. parm doWithIndex: [ :sym :ind | ind > 1 ifTrue: [ aColor := aColor perform: sym ] ]. ^ aColor ]. ^ parm2 Five is 5.C('aeiou' findFirstInByteString: 'hello world' startingAt: 9) >>> 0.c'((100@200) closeTo: (100@200)) >>> true0vector0100422 0vector0r: r g: g b: b range: range "Return a color with the given r, g, and b components specified as integers in the range [0..r]. This avoids the floating point arithmetic in the red:green:blue: message and is thus a bit faster for certain applications (such as computing a sequence of colors for a palette)." "(Color r: 31 g: 0 b: 0 range: 31) >>> (Color r: 1.0 g: 0 b: 0)" ^ self basicNew initializeRed: r green: g blue: b range: range; yourself3:at: firstKey at: secondKey "Return the object stored in the second dictionary at secondKey. The second dictionary is accessed via the key firstKey." " (OrderedDictionary new at: #top at: #below1 put: 1; at: #top at: #below1 put: 2; at: #top at: #below1) >>> 2" ^ dictionary at: firstKey at: secondKey'a' asInteger >>> nil22100.03Evaluate aBlock with each of the receiver's elements as the argument. Collect the resulting values into a collection like the receiver. Answer the new collection.<#(1 2 2 3 1 1 1) asBag sortedElements >>> {1->4. 2->2. 3->1}3TReturn the index starting at 1 of the argument in the receiver, zero if not present.21|| ad33XifNil: nilBlock ifNotNil: ifNotNilBlock "If the receiver is not nil, pass it as argument to the ifNotNilBlock block. else execute the nilBlock block" "Might be compiled inline for speed, see RBMessageNode>>#isInlineIfNil" "(nil ifNil: [42] ifNotNil: [:o | o +3 ] ) >>> 42" "(3 ifNil: [42] ifNotNil: [:o | o +3 ]) >>> 6" ^ nilBlock valuea2Color red hslSaturation >>> 1.0*0011"""2"""3333"""1111"""111"""1#"""#321002#foo:: asMutator >>> #'foo::'abc1 max: 2 + 3 absaol5('Ab cd ef Ab cd' allRangesOfSubstring: 'zz') >>> #()WReturn true if all my elements are close to the elements of same index of the parameter203420foo < bar: baz > That is false!zort00130 0001020300charlie1.928411.02r3wRunning average (a.k.a. moving average, rolling average). See the comment of self >> #running:of: for more information.eReturn a String representation of this number in base b. For SmallIntegers, it is more efficient to print directly in a String, rather than using a Stream like super.abc311cfoo:bar:a1(String streamContents: [ :str| ((FileSystem workingDirectory / 'book-result' / 'W01-Welcome') relativeToReference: FileSystem workingDirectory) printPathOn: str delimiter: $|]) >>> 'book-result|W01-Welcome'1foo10foo102M= aString "Answer whether the receiver sorts equally as aString. The collation order is simple ascii (with case differences)." " 'abc' = 'def' >>> false" " 'abc' = 'abc' >>> true" " 'def' = 'abc' >>> false" (aString isString and: [ self size = aString size ]) ifFalse: [ ^ false ]. ^ (self compare: self with: aString) = 0'indexOf: aCharacter "Return the index starting at 1 of the argument in the receiver, zero if not present." "('abcdf' indexOf: $a) >>> 1" "('abddf' indexOf: $k) >>> 0" aCharacter isCharacter ifFalse: [^ 0]. ^ self class indexOfAscii: aCharacter asciiValue inString: self startingAt: 12803b27Answer the index of the last occurrence of anElement within the receiver. If the receiver does not contain anElement, answer 0.44with: otherCollection do: twoArgBlock "Evaluate twoArgBlock with corresponding elements from this collection and otherCollection." "(Array streamContents: [:stream | #(1 2 3) with: #(4 5 6) do: [:a :b | stream nextPut: (a + b)]]) >>> #(5 7 9)" otherCollection size = self size ifFalse: [self errorSizeMismatch]. 1 to: self size do: [:index | twoArgBlock value: (self at: index) value: (otherCollection at: index)] goodby: my: %Point class classSide >>> Point class0vector4findString: substring "Answer the index of the first substring within the receiver. If the receiver does not contain substring, answer 0." "('salkjsdlkgfee' findString: 'al') >>> 2" "('salkjsdlkgfeesd' findString: 'sd') >>> 6" ^self findString: substring startingAt: 13(Array streamContents: [:stream | #(1 2 3 4) reject: [:each | each = 3 ] thenDo: [:each | stream nextPut: each + 10]]) >>> #(11 12 14)\Answer the fourth element of the receiver. Raise an error if there are not enough elements.,Evaluate aBlock with my elements taken n at a time. Ignore any leftovers at the end. Allows use of a flattened array for things that naturally group into groups of n. If aBlock has a single argument, pass it an array of n items, otherwise, pass the items as separate arguments. See also pairsDo:1'(1 to: 10) asOpenInterval >>> (2 to: 9)$0 isDecimalDigit >>> true;Tests-unix-64-SystemCommands-MessageCommands-Tests-Test.xmlcapacity "Answer the current capacity of the receiver." "OrderedCollection new capacity >>> 10" "(OrderedCollection new addAll: (1 to: 15); yourself) capacity >>> 20" ^ array size ######X#####sorted: aSortBlockOrNil "Return a new sequenceable collection which contains the same elements as self but its elements are sorted by aSortBlockOrNil. The block should take two arguments and return true if the first element should preceed the second one. If aSortBlock is nil then <= is used for comparison." "(#(3 1 4 2) sorted: [:a :b| a>=b]) >>> #(4 3 2 1)" "('hello' sorted: [:a :b| a>=b]) >>> 'ollhe'" "((1 to: 10 by: 2) sorted: [:a :b| a>=b]) >>> #(9 7 5 3 1)" ^self asArray sort: aSortBlockOrNil;'test test ' withSeparatorsCompacted >>> 'test test '19abc[Answer the third element of the receiver. Raise an error if there are not enough elements.102Tests-unix-64-System-Identification-Tests-Test.xml3ecR(#(1 2 3) collect: [:each | each + 10 ] thenSelect: [:each | each even]) >>> #(12)32-9wepppp AAAAAA ^ aaaaaa s n1311401010010-9-198001123456789AA0overlappingPairsCollect: aBlock "Answer the result of evaluating aBlock with all of the overlapping pairs of my elements." "(#(1 2 3 4) overlappingPairsCollect: [:first :second| first + second]) >>> #(3 5 7)" | retval | retval := self species ofSize: self size - 1. 1 to: self size - 1 do: [:i | retval at: i put: (aBlock value: (self at: i) value: (self at: i + 1)) ]. ^retval4171to0(#(a b a d a) lastIndexOf: #a ifAbsent: 7) >>> 50vector0~Answer the value of falseAlternativeBlock. Execution does not actually reach here because the expression is compiled in-line.3cool%((0@0) sideOf: (100@100)) >>> #center12Ufoo ^ [ :a1 :a2 :a3 :a4 :a5 :a6 :a7 :a8 :a9 :a10 :a11 :a12 :a13 :a14 :a15 :a16 | a1 ]Pharo(#() sumNumbers: #abs) >>> 0-103roundDownTo: aNumber "Answer the next multiple of aNumber toward negative infinity that is nearest the receiver. Examples:" "(3.1479 roundDownTo: 0.01) >>> 3.14" "(3.1479 roundDownTo: 0.1) >>> 3.1" "(1923 roundDownTo: 10) >>> 1920" "(3.1479 roundDownTo: 0.005) >>> 3.145" "(-3.1479 roundDownTo: 0.01) >>> -3.15" ^(self / aNumber) floor * aNumber0:B X0 n ssssXsss appreciate231(#(1 3 5 7 11 15 23) findBinary: [ :arg | 25 - arg ] ifNone: [ :a :b | 'between: ',{a. b} printString ]) >>> 'between: #(23 nil)'Morphic UI Process test -3/Answer how many elements the receiver contains.000000Unknown character3&'a3123abc' isAllAlphaNumerics >>> true10.0abc22233((#(1 2) detect: #even ifNone: [0]) >>> 21522112364e3iReturn a new sequenceable collection which contains the same elements as self but its elements are sortedtrue & true >>> truepharo salkjsdlkgfee7T(true ifTrue: [ 'That is true!' ] ifFalse: [ 'That is false!' ]) >>> 'That is true!'00102I(Date year: 2018 month: 9 day: 28) month printString >>> 'September 2018'7!"a" ( "b" ( "c" 1 "d" ) "e" ) "f"new: newSize streamContents: blockWithArg "A variant of #streamContents: where the initial or even final size is given to optimize memory consumption" "(Array new: 3 streamContents: [ :out | 3 timesRepeat: [ out nextPut: 42 ] ]) >>> #(42 42 42)" | stream | stream := WriteStream on: (self streamSpecies new: newSize). blockWithArg value: stream. "If the write position of stream is at the end of the internal buffer of stream (originalContents), we can return it directly instead of making a copy as contents would do" ^ stream position = stream originalContents size ifTrue: [ stream originalContents ] ifFalse: [ stream contents ]1A('abcDefgh' includesSubstring: 'De' caseSensitive: true) >>> true110-2.356194490192345-22f$'foo' asByteArray >>> #[102 111 111]40.005 XXX225a14'he''llo' surroundedBySingleQuotes >>> '''he''llo'''hop?Search for an element in the receiver using binary search. The argument aBlock is a one-element block returning 0 - if the element is the one searched for <0 - if the search should continue in the first half >0 - if the search should continue in the second half If no matching element is found, raise an error.-0.9//0.4 >>> -3 fromString: aString "Return a color for HTML color spec: #FFCCAA or white/black passed as string." "(Color fromString: '#FFCCAA')>>> (Color r: 1.0 g: 0.8 b: 0.667 alpha: 1.0) " "(Color fromString: 'orange') >>> Color orange" | aColorHex | aString isEmptyOrNil ifTrue: [ ^ self white ]. aColorHex := aString first = $# ifTrue: [ aString allButFirst ] ifFalse: [ aString ]. "Try to match aColorHex with known named colors, case insensitive." ^ self registeredColorNames detect: [ :each | each sameAs: aColorHex ] ifFound: [ :namedColor | self named: namedColor ] ifNone: [ (aColorHex size = 6 and: [ aColorHex allSatisfy: [ :character | '0123456789ABCDEFabcdef' includes: character ] ]) ifTrue: [ self fromHexString: aColorHex ] ifFalse: [ self white ] ]?(#(a b c d e) indexOfSubCollection: #(c d) startingAt: 2) >>> 34257|Retrieve an element with a probability related to the weighting block. The block takes an element as argument and provides a positive number as result (the retative weight). An implicit normalization is performed on all weights. Multiple occurences of equal elements multiply the probability to be choosen. Warning: empty collections and negative weights will signal errors.1526)Tests-unix-64-Network-Mail-Tests-Test.xml#(10 20 30) anyOne >>> 10atLast: indexFromEnd put: obj "Set the element at indexFromEnd from the last position. atLast: 1 put: obj, sets the last element" "({#x .#y .#z} atLast: 2 put: #e; yourself) >>> #(x e z)" ^ self at: self size + 1 - indexFromEnd put: obj093010from: start to: stop do: aBlock "Evaluate aBlock for all elements between start and stop (inclusive)." "(Array streamContents: [:stream | #(10 20 30 40) from: 2 to: 3 do: [:each | stream nextPut: each]]) >>> #(20 30)" start to: stop do: [:index | aBlock value: (self at: index)]S(#(10 20 30) withIndexCollect: [:each :index | each + (index * 2)]) >>> #(12 24 36)172123sumNumbers "This is implemented using a variant of the normal inject:into: pattern that is specific to handling numbers. The receiver should include only numbers. Different from the sum implementation, the default value is zero. While sum is more general, sumNumbers is meant to support the most often encountered use case of dealing with numbers." "#(1 2 4) sumNumbers >>> 7" "#() sumNumbers >>> 0" ^ self inject: 0 into: [ :sum :each | sum + each ] XXXXXXEvaluate aBlock with each of the receiver's elements as the argument. Answer the element for which aBlock evaluates to the highest magnitude. If collection empty, return nil. This method might also be called elect:.215334(#(a b z k) difference: #(a b c d e f)) >>> #(#z #k)01foo: self ^ self + 133101arcTan: denominator "Answer the angle in radians. Implementation note: use sign in order to catch cases of negativeZero" "(-0.5 arcTan: -0.5) >>> -2.356194490192345" "(1.2 arcTan: 1.5) >>> 0.6747409422235526" "(1.2 arcTan: -1.5) >>> 2.4668517113662407" ^ self = 0.0 ifTrue: [denominator signBit = 0 ifTrue: [ 0 ] ifFalse: [ self signBit = 0 ifTrue: [ Pi ] ifFalse: [ Pi negated ]]] ifFalse: [denominator = 0.0 ifTrue: [self > 0.0 ifTrue: [ Halfpi ] ifFalse: [ Halfpi negated ]] ifFalse: [denominator > 0 ifTrue: [ (self / denominator) arcTan ] ifFalse: [self > 0 ifTrue: [ ((self / denominator) arcTan) + Pi ] ifFalse: [ ((self / denominator) arcTan) - Pi ]]]]302102size "Answer how many elements the receiver contains." "#(1 2 2 3 1 1 1) asBag size >>> 7" | tally | tally := 0. contents do: [:each | tally := tally + each]. ^ tally52 #[ 1 1.0 2 ]2Vsize "#(a b c d e) size >>> 5" "#(x y z) size >>> 3" ^ self subclassResponsibility 89Ten 3:Returns the basename without specified extension (if any) 'hello' sorted >>> 'ehllo'81 goodby: my: | aBoolean "Evaluating disjunction (OR). Evaluate the argument. Then answer true if either the receiver or the argument is true." "true | true >>> true" "true | false >>> true" "false | true >>> true" "false | false >>> false" self subclassResponsibility1y:Tests-unix-64-NewTools-Debugger-Breakpoints-Tools-Test.xmlcool/('pharo' beginsWith: 'pharo-project') >>> false2Subclasses should decide what meta level of given class should be used to retrieve/build hierarchy. For example superclass hierarchy of ProtoObject class can stop at it according to instance side hierarchy 0000000000003?('hello world!' anySatisfy: [ :each | each isDigit ]) >>> false0.011doe"('abcd' contractTo: 10) >>> 'abcd'1 Pharo is cool11runningAverage: aSubsetSize "Running average (a.k.a. moving average, rolling average). See the comment of self >> #running:of: for more information." "(#(1 1 2 2 3 3) runningAverage: 2) >>> {1 . (3/2) . 2 . (5/2) . 3}" ^ self running: [ :subset | subset average ] of: aSubsetSize1000230| aBoolean "Evaluating disjunction (OR) -- answer with the argument, aBoolean, since the receiver is false." "false | true >>> true" "false | false >>> false" ^aBoolean10020pharo!1cb24(1 to: 10) copyEmpty >>> #()202.3028130d2 22220000111120Answer the index of the first occurrence of any element included in aCollection within the receiver. If the receiver does not contain anElement, answer the result of evaluating the argument, exceptionBlock.0201412('fred the bear' copyWithout: $e) >>> 'frd th bar'13+(0 printShowingDecimalPlaces: 2) >>> '0.00'15042vweekdayIndex "Sunday=1, ... , Saturday=7" "(Date year: 2018 month: 9 day: 28) weekdayIndex >>> 6" ^ self dayOfWeek310 000102203002groupsOf: n atATimeDo: aBlock "Evaluate aBlock with my elements taken n at a time. Ignore any leftovers at the end. Allows use of a flattened array for things that naturally group into groups of n. If aBlock has a single argument, pass it an array of n items, otherwise, pass the items as separate arguments. See also pairsDo:" "(Array streamContents: [:stream | #(10 20 30 40 50) groupsOf: 2 atATimeDo: [:first :second | stream nextPut: (first + second)]]) >>> #(30 70)" | passArray | passArray := (aBlock numArgs = 1). n to: self size by: n do: [:index | | args | args := (self copyFrom: index - n + 1 to: index) asArray. passArray ifTrue: [ aBlock value: args ] ifFalse: [ aBlock valueWithArguments: args ]]2010032 1 + . ^ 20min: maxValue max: minValue "Take the minimum between self and maxValue, then the maximum with minValue" "(10 min: 20 max: 5) >>> 10" "(10 min: 20 max: 11) >>> 11" "(24 min: 20 max: 5) >>> 20" ^ (self min: maxValue) max: minValue/{0@1. 2@3} * {10@20. 30@0} >>> {(0@20). (60@0)}1#((())) size >>> 1(#() writeStreamDo: [ :stream | stream nextPut: '4'; space; nextPutAll: '34'. stream contents ]) >>> {'4'. Character space. $3. $4}1.0Evaluate aBlock for each of the receiver's elements and answer the list of all resulting values flatten one level. Assumes that aBlock returns some kind of collection for each element. Equivalent to the lisp's mapcan120| | u78110Pha1a. :foo1a&(AsciiCharset toUppercase: $a) >>> $A.2000011213141100 #(8 5 3 9) sorted >>> #(3 5 8 9) + 1. - a. - 1. - 1 "A"30Ymodulo. Remainder defined in terms of //. Answer a Number with the same sign as aNumber.This statement is true!h'on: aStream "Create a scanner stream of program tokens on the argument. Users can then use stream API to consume tokens." "((RBScanner on: 'Pharo (, { exist ]' readStream) next; next) value >>> $(" | scanner | scanner := self new on: aStream. scanner step; stripSeparators. ^scanner4100vector0findLast: aBlock "Return the index of my last element for which aBlock evaluates as true. If no matching element is found, return 0" "(#(10 20 30 40 50) findLast: [ :each | each > 10 ]) >>> 5" "(#(10 20 30 40 50) findLast: [ :each | each > 60 ]) >>> 0" | index | index := self size + 1. [(index := index - 1) >= 1] whileTrue: [(aBlock value: (self at: index)) ifTrue: [^index]]. ^ 02001.(1 max: 1000) >>> 1000032402%'isSymbol' findSelector >>> #isSymbol0060.013removeDuplicates "Remove the copies of elements, but keep the same order" "#(7 42 7 42 9) asOrderedCollection removeDuplicates asArray >>> #(7 42 9)" "#(1 2 3) asOrderedCollection removeDuplicates asArray >>> #(1 2 3)" | iterator seen | self ifEmpty: [ ^ self ]. iterator := 1. seen := Set new. [ iterator <= self size ] whileTrue: [ | each | each := self at: iterator. (seen includes: each) ifTrue: [ self removeAt: iterator ] ifFalse: [ seen add: each. iterator := iterator + 1. ]. ]1 first element11505(#(11 22 33) atWrap: 2) >>> 2224GPairwise difference of two sequenceable collections of the same length.#() asCommaStringAnd >>> ''W(false ifTrue: [ 'That is true!' ] ifFalse: [ 'That is false!' ]) >>> 'That is false!'1.(#(1 2 3 4) intersection: #(3 4 5)) >>> #(3 4)3a'b1((10 to: 20) detectMax: [ :p | p gcd: 6 ]) >>> 122018 + 2bfoo: arg ^ arg + 110(42 decimalDigitAt: 2) >>> 411165d ( 1 and: 4)b=Return true if the receiver is sorted by the given criterion.10c(String streamContents: [:s | #(10 20 30) do: [:each | s << each asString] without: 20]) >>> '1030'5Answer the receiver with leading and trailing quotes.10013isUnary "Answer whether the receiver is an unary message selector." "#new isUnary >>> true" "#>> isUnary >>> false" "#between:and: isUnary >>> false" ^ self precedence = 14 0015220@ foo6EMight be compiled inline for speed, see RBMessageNode>>#isInlineIfNilstoreStringBase: base "Returns a string representation of the receiver in base 16 in a way that executing it will return the receiver." "(10 storeStringBase: 16) >>> '16rA'" "(10 storeStringBase: 10) >>> '10'" ^ String streamContents: [:strm | self storeOn: strm base: base]groupedBy: aBlock "Answer a dictionary whose keys are the result of evaluating aBlock for all my elements, and the value for each key is the selection of my elements that evaluated to that key. Uses species." "(#(1 2 3 4 5) groupedBy: [ :v | v odd ]) asString >>> 'an OrderedDictionary(true->#(1 3 5) false->#(2 4))'" | groups | groups := OrderedDictionary new. self do: [ :each | (groups at: (aBlock value: each) ifAbsentPut: [ OrderedCollection new ]) add: each ]. self species ~~ OrderedCollection ifTrue: [ groups associationsDo: [ :association | association value: (self species withAll: association value) ]]. ^ groups3collect: aBlock "Evaluate aBlock with each of the receiver's elements as the argument. Collect the resulting values into a collection like the receiver. Answer the new collection. Note: the returned collection is of the same species. If this species does not accomdate the values of aBlock, look at collect:as:" "(#(10 20 30) collect: [:e | e+1]) >>> #(11 21 31)" "({10@20. 30@0} collect: [:e | e x]) >>> #(10 30)" "('Hello, world!' collect: [:e | e isLetter ifTrue: e ifFalse: $-]) >>> 'Hello--world-'" "((1 to: 10) collect: [:i| i gcd: 6]) >>> #(1 2 3 2 1 6 1 2 3 2)" "(#() collect: [:x | x+1]) >>> #()" | newCollection | newCollection := self copyEmpty. self do: [:each | newCollection add: (aBlock value: each)]. ^ newCollection(true xor: [false]) >>> truep X& aBoolean "Evaluating conjunction -- answer aBoolean since receiver is true." "true & true >>> true" "true & false >>> false" ^aBoolean1emptyCheck "Signal CollectionIsEmpty if the collection is empty" "#(10 20) emptyCheck >>> #(10 20)" "([#() emptyCheck] on: CollectionIsEmpty do: [ 'oops' ]) >>> 'oops'" self isEmpty ifTrue: [self errorEmptyCollection]indexOf: anElement "Answer the index of the first occurrence of anElement within the receiver. If the receiver does not contain anElement, answer 0." "(#(a b c d e) indexOf: #c) >>> 3" "(#(a b c d e) indexOf: #x) >>> 0" ^ self indexOf: anElement ifAbsent: 0*85.71143>({ 2@6 . -4@3 . 10@ -3 } detectMin: [ :p | p y ]) >>> (10@ -3)0B'234znak ::x43 '') _ : 2' asValidSelector >>> #'v234znak:x43:v2'3 [: a : b]120.0200 hello 3.1479f(100@200) y >>> 200.'displayStringOn:foo' endsWithAColon >>> false11021 Pharo is cool4{guarded "Return a positive nonzero extent." "(100@200) guarded >>> (100@200)" "(0@5) guarded >>> (1@5)" ^self max: 1@1-0.9b00011121344151100200'Concatenate two Strings or Collections.15d(String streamContents: [:s | 10 print: '10' on: s prefix: 'zz' length: 4 padded: true] ) >>> 'zz10'25$' isAlphaNumeric >>> false foobazzort17 111111100(#(x y z) atLast: 2) >>> #y219humanReadableSISizeString "Return the receiver as a string with SI binary (International System of Units) file size, e.g. '50 KB'. It means that it takes 1000 and not 1024 as unit as humanReadableByteSizeString does." "(1000 * 1000 * 1000) humanReadableSISizeString >>> '1.00 GB'" "(1000 * 1000 * 1000) humanReadableByteSizeString >>> '953.67 MB'" "(1024 * 1024 * 1024) humanReadableSISizeString >>> '1.07 GB'" ^ String streamContents: [ :s| self humanReadableSISizeOn: s ]runningMin: aSubsetSize "Running min. See the comment of self >> #running:of: for more information." "(#(1 1 2 2 3 3) runningMin: 3) >>> {1 . 1 . 2 . 2}" ^ self running: [ :subset | subset min ] of: aSubsetSize2RReturn the metaclass of the couple class/metaclass. Useful to avoid explicit test.Answer whether text matches the pattern in this string. Matching ignores upper/lower case differences. Where this string contains #, text may contain any character. Where this string contains *, text may contain any sequence of characters.>> (Color blue)020183Tests-unix-64-NewTools-CodeCritiques-Tests-Test.xml/Tests-unix-64-Shift-ClassBuilder-Tests-Test.xmla3'('ab ab ac de' howManyMatch: 'z') >>> 020l(#(1 2 3 4 5) groupedBy: [ :v | v odd ]) asString >>> 'an OrderedDictionary(true->#(1 3 5) false->#(2 4))'2>(Color r: 31 g: 0 b: 0 range: 31) >>> (Color r: 1.0 g: 0 b: 0)foo: arg bar: arr ^ arg + arr2018atWrap: index "Answer the index'th element of the receiver. If index is out of bounds, let it wrap around from the end to the beginning until it is in bounds." "Optimized to go through the primitive if possible" "(#(11 22 33) atWrap: 3) >>> 33" "(#(11 22 33) atWrap: 2) >>> 22" "(#(11 22 33) atWrap: 4) >>> 11" ^ self at: index - 1 \\ self size + 12 ' hello '3e>(#(e b a d e) lastIndexOf: #a startingAt: 4 ifAbsent: 7) >>> 3iNote: The original code used #skip:, but some streams do not support that, and we don't really need it.s:1 e:5 s:7 e:8 s:10 e:13 411024 bytestring11aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa11'('hello' difference: 'aeiou') >>> 'hll'-3.7 002Too many argumentsZReplace all occurrences of oldSubstring that are surrounded by non-alphanumeric characters0vector05130vector0'(#(1 2 3 4 5) beginsWith: #()) >>> truetwoUwithoutQuoting "remove the initial and final quote marks (single quote for string, or double quotes for comments), if present (and if matches nesting quotes). Have a look at testWithoutQuoting. If you want to remove single/double quotes not in first and last positions of the strings, have a look at copyWithout: $' " "'''h''' withoutQuoting >>> 'h'" "' ''h'' ' withoutQuoting >>> ' ''h'' '" | quote | self size < 2 ifTrue: [ ^ self ]. quote := self first. ^ (quote = self last and: [ quote = $' or: [ quote = $" ] ]) ifTrue: [ self copyFrom: 2 to: self size - 1 ] ifFalse: [ self ]This statement is false!151 factorial >>> 161131e44-Tests-unix-64-Collections-Weak-Tests-Test.xml(1}2)1(false or: [true]) >>> true:. :25420-16rAaUmedian "Return the middle element, or as close as we can get. The collection must not be empty." "{1 . 2 . 3 . 4 . 5} median >>> 3" "{1 . 2 . 4 . 5} median >>> 3" "{1 . 2 . 5 . 5} median >>> (7/2)" "{3} median >>> 3" "([{} median] on: CollectionIsEmpty do: [ 'oops' ]) >>> 'oops'" self emptyCheck. ^ self asSortedCollection median333YAnswer true if the receiver contains the substring str exactly at index, false otherwise.2 Five is 5.331 nanoSecond printString >>> '0:00:00:00.000000001'70.0love101'{1@2. 3@ -1} negated >>> {-1@ -2. -3@1}1n uuuuuuu Xuu n1'2N' initialIntegerOrNil >>> 2RUtility method to improve readability. Do not create the intermediate collection.hello15#. 1('aa' compare: 'ab') >>> 12xa113canamed: aString ifNone: aBlock "Returns the instance of myself having aString as name." "(KeyboardKey named: 'SHIFT_L') >>> (KeyboardKey value: 65505)" ^ KeyNameTable at: aString ifAbsent: aBlock1b3('In \{1\} you can escape \{ by prefixing it with \\' format: {'strings'}) >>> 'In {1} you can escape { by prefixing it with \' C([0 isEmptyOrNil] on: MessageNotUnderstood do: ['oops']) >>> 'oops'02 one:1;two:2;13kEvaluate the block, unless I'm == nil (q.v.). If the receiver is not nil, pass it as argument to the block.1pppp X102042;.0000001110334444555555555554446666666664444220 | TTTTTT | tttttt n. ^ tttttt-1indexOf: anElement ifAbsent: exceptionBlock "Answer the index of the first occurrence of anElement within the receiver. If the receiver does not contain anElement, answer the result of evaluating the argument, exceptionBlock." "(#(a b c d e) indexOf: #c ifAbsent: 7) >>> 3" "(#(a b c d e) indexOf: #x ifAbsent: 7) >>> 7" ^ self indexOf: anElement startingAt: 1 ifAbsent: exceptionBlock55abc3+ a:2#[ 1 21511. := 21&Tests-unix-64-Microdown-Tests-Test.xml100bcbook-result/W01-WelcomennumericSuffix "'abc98' numericSuffix >>> 98" "'98abc' numericSuffix >>> 0" ^ self stemAndNumericSuffix last<(RPackage named: 'MockPackage-Tests') isTestPackage >>> true)Count the occurrences of each bytecode during the execution of aBlock. Return a Array of associations using the byte as key and the occurrences as values sorted by the instruction opcode numeric values. This method uses the in-image bytecode interpreter to evaluate and count the instructions.280<(1 second + 2 milliSeconds) printString >>> '0:00:00:01.002'That is false!false not >>> true234B('pharo' endsWith: 'project-pharo' caseSensitive: false) >>> false0WReturns a symbol that is a valid selector by removing any space or forbidden characters5a6Returns the instance of myself having aString as name.001ATry to match aColorHex with known named colors, case insensitive. 'def' = 'abc' >>> falseMockPackage-Tests2018elmer2(#() select: [true]) >>> #()-2+(#(a b c d e) indexOfAnyOf: #(x y z)) >>> 0531-1400identityIndexOf: anElement ifAbsent: exceptionBlock "Answer the index of anElement within the receiver. If the receiver does not contain anElement, answer the result of evaluating the argument, exceptionBlock." "(#(a b c d e) identityIndexOf: #c ifAbsent: 7) >>> 3" "(#(a b c d e) identityIndexOf: #x ifAbsent: 7) >>> 7" 1 to: self size do: [:i | (self at: i) == anElement ifTrue: [^ i]]. ^ exceptionBlock valueanyOne "Answer a representative sample of the receiver. It raises an error when the collection is empty. This method can be helpful when needing to preinfer the nature of the contents of semi-homogeneous collections." "#(10 20 30) anyOne >>> 10" "'hello' anyOne >>> $h" "(50 to: 10 by: -5) anyOne >>> 50" " ([#() anyOne] on: SubscriptOutOfBounds do: [ :ex | 'whatever' ]) >>> 'whatever' " self emptyCheck. self do: [ :each | ^ each ]5asColorref "Convert the receiver into a colorref, i.e, a number embedding r,g,b on 24 bits" "(Color red asColorref) >>> 255" "(Color white asColorref) >>> 16777215" ^(self red * 255) asInteger + ((self green * 255) asInteger << 8) + ((self blue * 255) asInteger << 16)0yisAllAlphaNumerics "Returns whether the receiver is composed entirely of alphanumerics (i.e., letters or digits)." "'3.123' isAllAlphaNumerics >>> false" "'a3123abc' isAllAlphaNumerics >>> true" "'3123' isAllAlphaNumerics >>> true" "'3,123' isAllAlphaNumerics >>> false" "'a''b' isAllAlphaNumerics >>> false" self do: [:c | c isAlphaNumeric ifFalse: [^ false]]. ^ true5$(#() anySatisfy: [ true ]) >>> false27 September 2018fromString: string "Parse and materialize the STON representation in string" "(STON fromString: 'Point[1,2]') >>> (1@2)" ^ self fromStream: string readStream!(10 storeStringBase: 10) >>> '10'1/| TTTTTTTTTTT | ttttttttttt n. ^ ttttttttttt41 'def' <= 'abc' >>> falseAnswer the set theoretic difference of two collections. Pay attention that the difference is not commutative, hence the order is important.replaceFrom: start to: stop with: replacement "This destructively replaces elements from start to stop in the receiver. Answer the receiver itself. Use copyReplaceFrom:to:with: for insertion/deletion which may alter the size of the result." "({#a. #b. #c. #d. #e} replaceFrom: 3 to: 4 with: #(x y)) >>> #(a b x y e)" replacement size = (stop - start + 1) ifFalse: [self error: 'Size of replacement doesnt match']. ^self replaceFrom: start to: stop with: replacement startingAt: 1i3removeAllSuchThat: aBlock "Evaluate aBlock for each element and remove all that elements from the receiver for that aBlock evaluates to true. Use a copy to enumerate collections whose order changes when an element is removed (i.e. Sets)." "(#(5 6 7 8) asOrderedCollection removeAllSuchThat: #even) >>> #(5 7) asOrderedCollection" self copy do: [:each | (aBlock value: each) ifTrue: [self remove: each]](Answer the first element of the receiver%(AsciiCharset toUppercase: $!) >>> $!b2100a203 2 odd >>> false [ :a | a ]1202021100EReturn the HSV saturation of this color, a value between 0.0 and 1.0.charlie4CisEmptyOrNil "Answer whether the receiver contains any elements, or is nil. Useful in numerous situations where one wishes the same reaction to an empty collection or to nil" "#() isEmptyOrNil >>> true" "nil isEmptyOrNil >>> true" "([0 isEmptyOrNil] on: MessageNotUnderstood do: ['oops']) >>> 'oops'" ^ self isEmpty5Optimized version of Collection>>#reject:thenCollect:abcwReturn the object stored in the second dictionary at secondKey. The second dictionary is accessed via the key firstKey.11d11Negative numbers can't be raised to float powers.315&(Color white asColorref) >>> 16777215hello200'foo1' endsWithDigit >>> true010120Nonevaluating conjunction. If the receiver is true, answer the opposite of the the argument, alternativeBlock; otherwise answer the value of the alternativeBlock.0adasSortFunction "Return a SortFunction around the receiver, where the receiver will be used as a unary message to send to both a and b during sorting, and then the result of said send will be collated in ascending order using the <=> method." "(#('abc' 'de' 'fghi') sorted: #size ascending) >>> #('de' 'abc' 'fghi')" ^PropertySortFunction property: self1]((ByteArray with: 97 with: 0 with: 0 with: 0) asString sameAs: 'Abcd' asWideString) >>> false32.011 X Xsss X 433042 ** 8 >>> 2561u  555 0066601 777 121abcIMPLEMENTATION NOTE: following algorithm is optimized in primitive only in case self and prefix are bytes like. Otherwise, if self or prefix are wide strings, then slow version with asLowercase convertation, (primitive is not correct for wide strings)1eReturn the receiver as a string with SI binary (International System of Units) file size, e.g. '50 KB'. It means that it takes 1000 and not 1024 as unit as humanReadableByteSizeString does.!((2@2) + (100@200)) >>> (102@202)1hello31 X n10 0 :B |X b X X2092=Answer a copy of the receiver without any duplicated elements1bbytesCount "Answer the number of indexable fields in the receiver. This value is the same as the largest legal subscript. Included so that a SmallInteger can behave like a LargePositiveInteger or LargeNegativeInteger." "32768 == (1 bitShift: 15)" "32768 bytesCount >>> 2" "65536 == (1 bitShift: 16)" "65536 bytesCount >>> 3" | value length | length := 1. value := self. value >= 0 ifTrue: [[value > 255] whileTrue: [value := value bitShift: -8. length := length + 1]] ifFalse: [[value < -255] whileTrue: [value := value bitShift: -8. length := length + 1]]. ^length2Print elements on a stream separated with a delimiter between all the elements and with a special one before the last like: 'a, b and c'. Uses #asString instead of #print: Note: Feel free to improve the code to detect the last element.FileLocator temp / ('{1}.ston' format: { Time millisecondClockValue }) in: [ :file | file writeStreamDo: [ :out | STON put: 1@2 onStream: out ]. file readStreamDo: [ :in | STON fromStream: in ] ]-19812bPharo103101DPairwise product of two sequenceable collections of the same length.1001100.0121fo210020000 [ :a || a b ]32NifTrue: alternativeBlock "Since the condition is false, answer the value of the false alternative, which is nil. Execution does not actually reach here because the expression is compiled in-line." "(false ifTrue: [ 'This statement is true!' ]) >>> nil" ^nil { 1 ). 2 }[ :a btest te stringpharo0[Answer the sixth element of the receiver. Raise an error if there are not enough elements. 1 sign; ; bar11 and 20@(1000 * 1000 * 1000) humanReadableByteSizeString >>> '953.67 MB'20 XX n X n X(1 to: 10 by: 2) last >>> 91true asInteger >>> 19initialIntegerOrNil "Answer the integer represented by the leading digits of the receiver, or nil if the receiver does not begin with a digit" "'234Whoopie' initialIntegerOrNil >>> 234" "'wimpy' initialIntegerOrNil >>> nil" "'234' initialIntegerOrNil >>> 234" "'2N' initialIntegerOrNil >>> 2" "'2' initialIntegerOrNil >>> 2" "' 89Ten ' initialIntegerOrNil >>> nil" "'78 92' initialIntegerOrNil >>> 78" "'3.1415' initialIntegerOrNil >>> 3" | firstNonDigit | (self size = 0 or: [ self first isDigit not ]) ifTrue: [ ^ nil ]. firstNonDigit := (self findFirst: [ :m | m isDigit not ]). firstNonDigit = 0 ifTrue: [ firstNonDigit := self size + 1 ]. ^ (self copyFrom: 1 to: (firstNonDigit - 1)) asNumber-Tests-unix-64-NewTools-Spotter-Tests-Test.xmlK(#(a b c d e) indexOfSubCollection: #(c d) startingAt: 4 ifAbsent: 7) >>> 7b9]Returns whether the receiver is composed entirely of alphanumerics (i.e., letters or digits).3('*' match: 'zort') >>> truesplit: aSequenceableCollection indicesDo: aBlock "Perform an action specified as aBlock (with a start and end argument) to each of the indices of aSequenceableCollection that have been identified by taking the receiver as a splitter." "(String streamContents: [:s | [:c | c isSeparator ] split: 'Pharo is cool' indicesDo: [ :start :end | s << 's:' << start asString << ' ' << 'e:' << end asString << ' ' ]]) >>> 's:1 e:5 s:7 e:8 s:10 e:13 '" | position | position := 1. aSequenceableCollection withIndexDo: [:element :idx | (self value: element) ifTrue: [ aBlock value: position value: idx - 1. position := idx + 1 ]]. aBlock value: position value: aSequenceableCollection size~(OrderedDictionary newFromKeys: #(#x #y) andValues: #(3 6)) >>> (OrderedDictionary new at: #x put: 3; at: #y put: 6 ;yourself)KPairwise integer modulo of two sequenceable collections of the same length.4world30alB(#(1 1 2 2 3 3) runningAverage: 2) >>> {1 . (3/2) . 2 . (5/2) . 3}Pcount: aBlock "Evaluate aBlock with each of the receiver's elements as the argument. Answer the number of elements that answered true." "(#(1 2 3 4) count: [ :each | each even ]) >>> 2" "('Hello, World!' count: #isLowercase) >>> 8" | sum | sum := 0. self do: [ :each | (aBlock value: each) ifTrue: [ sum := sum + 1 ] ]. ^ sum1#(1 2 3 4) selectEverySecond asArray >>> #(2 4) "('pharo' endsWith: 'aro') >>> true (50 to: 10 by: -5) anyOne >>> 50742fred10cadd: newObject withOccurrences: anInteger "Add newObject anInteger times to the receiver. Answer newObject." "({10. 20} asOrderedCollection add: 30 withOccurrences: 2) >>> 30" "({10. 20} asOrderedCollection add: 30 withOccurrences: 2; yourself) >>> {10. 20. 30. 30} asOrderedCollection" anInteger timesRepeat: [ self add: newObject ]. ^ newObjectfoo | tmp | tmp := 1. ^ tmp1:('pharo' endsWith: 'phuro' caseSensitive: false) >>> false111001This should not happen7ifTrue: trueAlternativeBlock ifFalse: falseAlternativeBlock "Answer with the value of trueAlternativeBlock. Execution does not actually reach here because the expression is compiled in-line." "(true ifTrue: [ 'That is true!' ] ifFalse: [ 'That is false!' ]) >>> 'That is true!'" ^trueAlternativeBlock valuey1G(OrderedCollection new add: 42; add: 43; yourself) asArray >>> #(42 43)11*'displayStringOn:' endsWithAColon >>> truec!"a" { "b" 1 "c" . "d" 2 "e" } "f"1 'abc' >= 'def' >>> false10XXaXbXXcXXXdXX1001.012.*:(100@90 isInsideRectangle: (0@0 corner: 100@100))>>> false10 [:a||||a]round: numberOfWishedDecimal "Round the decimal part of the receiver to be limited to the number of wished decimal. Only leave a fixed amount of decimal" "(10.12345 round: 2) >>> 10.12" "(10.199999999 round: 2) >>>10.2" ^ self subclassResponsibilityd00 0(#(1 3 5 7 11 15 23) findBinary: [ :arg | 25 - arg ] do: [ :found | found ] ifNone: [ :a :b | 'between: ',{a. b} printString ]) >>> 'between: #(23 nil)'1an integer greater than 1 as valid radix expectedhello!00000100000020445atLast: indexFromEnd "Return element at indexFromEnd from the last position. atLast: 1, returns the last element" "(#(x y z) atLast: 1) >>> #z" "(#(x y z) atLast: 2) >>> #y" ^ self atLast: indexFromEnd ifAbsent: [self error: 'index out of range'].00777777DDD88EEE999999999FFFAAAGGGBBHHHCCCIII0wsecond "1 second printString >>> '0:00:00:01'" "(1 minute + 1 second) printString >>> '0:00:01:01'" ^ self seconds + endsWithAColon "Answer whether the final character of the receiver is a colon" "'displayStringOn:' endsWithAColon >>> true" "'displayStringOn:foo' endsWithAColon >>> false" ^ self notEmpty and: [ self last == $: ]Answer the index of anElement within the receiver. If the receiver does not contain anElement, answer the result of evaluating the argument, exceptionBlock.20xb4,(#(10 20 30) includesAny: #(30 40)) >>> true|Integer quotient defined by division with truncation toward negative infinity. \\ answers the remainder from this division.string243aRo01'00000103366778777B9999AA77C66555555444D1#( #( ) #'.' #':' #';' #'[' #']' #'{' #'}' #'^' )-1920c2110, 'hello', $x19,(3 ifNotNil: [:o | o +3 ] ifNil: [42]) >>> 612P(#(true true false true) inject: 0 into: [ :sum :each | sum + each asBit]) >>> 31e022222133344444foo:0520%OrderedCollection new capacity >>> 101240.0302111 0001002000400ca::f1110E([:x :y :z | x + y + z] valueWithPossibleArgs: #( 13 12 15)) >>> 40 ,Tests-unix-64-FileSystem-Core-Tests-Test.xmlb40'1abc' startsWithDigit >>> true30foo:11hWe are sorry but this method is unclear and will probably be removed. This method only returning false.(10.12345 round: 2) >>> 10.12115SAnswer a new instance where all occurrences of CRLF and LF are substituted with LF.201330000011111103355555544461between: #(7 8)7aaverageIfEmpty: aBlock "This method return the average of the collection if it is not empty. In the other case, it return the value of the block. It means the user the user of this method decide of the return value." "(#(10) averageIfEmpty: [ 0 ]) >>> 10" "(#() averageIfEmpty: [ 0 ]) >>> 0" "({3@5. 7@ -4} averageIfEmpty: [0@0]) >>> (5@(1/2))" "({} averageIfEmpty: [0@0]) >>> (0@0)" self ifEmpty: [ ^ aBlock value ]. ^ self average100000022222223265553#(1]2}3)0.98000bar320abc316r1E2$'3,123' isAllAlphaNumerics >>> false2.56741001Return a SortFunction around the receiver, where the receiver will be used as a unary message to send to both a and b during sorting, and then the result of said send will be collated in ascending order using the <=> method. hello world5#(10 20 30) | (0 to: 15 by: 5) >>> #(0 15 5 30 20 10)255256This statement is true!13$} isControlOther >>> false112'AA' asHex >>> '16r4116r41'10002u(#(10 20 30) inject: OrderedCollection new into: [ :a :e | a add: (e + 1). a ]) >>> #(11 21 31) asOrderedCollection.(#(2 3 4 5 5 6) copyWithout: 5) >>> #(2 3 4 6)'hello' copyEmpty >>> ''isFloatPoint "Return true if both of my x and y coordinates are represented by float values, otherwise false" "(1@2) isFloatPoint >>> false" "(1@2.2) isFloatPoint >>> false" "(1.3@2.2) isFloatPoint >>> true" "((1/3)@(2/2)) isFloatPoint >>> false" ^ x isFloat and: [ y isFloat ]!(2 ifNotNil: [ :o | o + 3]) >>> 531ProtoObject superclass >>> nil321a###'9(50@50 isInsideRectangle: (0@0 corner: 100@100)) >>> true3!31111200445555555A888897766DBBBBCRemove each element of aCollection which is present in the receiver from the receiver. Answer aCollection. No error is raised if an element isn't found. ArrayedCollections cannot respond to this message.011indexOfAnyOf: aCollection startingAt: start ifAbsent: exceptionBlock "Answer the index of the first occurrence of any element included in aCollection after start within the receiver. If the receiver does not contain anElement, answer the result of evaluating the argument, exceptionBlock. Note: it is user responsibility to provide aCollection that behaves relatevily fast when asked for includes: (like a Set)" "(#(a b c d e) indexOfAnyOf: #(x y c) startingAt: 2 ifAbsent: 7) >>> 3" "(#(a b c d e) indexOfAnyOf: #(x y c) startingAt: 4 ifAbsent: 7) >>> 7" start to: self size do: [:index | (aCollection includes: (self at: index)) ifTrue: [^ index]]. ^ exceptionBlock value@({1@3. 2@1. 3@6. 4@8} detect: [ :each | each x even ]) >>> (2@1)a\withIndexDo: elementAndIndexBlock "Just like do: except that the iteration index supplies the second argument to the block" "(Array streamContents: [:stream| #(11 22 13) withIndexDo: [ :each :i | stream nextPut: (each * each + i)]]) >>> #(122 486 172)" 1 to: self size do: [ :index | elementAndIndexBlock value: (self at: index) value: index ]11Return a new sequenceable collection which contains the same elements as self but its elements are sorted by aSortBlockOrNil. The block should take two arguments and return true if the first element should preceed the second one. If aSortBlock is nil then <= is used for comparison.19abc3111,(#(10 20 30) includesAll: #(30 20)) >>> true10foo10+((1 to: 8) reject: #isPrime) >>> #(1 4 6 8)| DEvaluate aBlock for all elements between start and stop (inclusive).0This statement is false!2Answer a number that represents the number of complete seconds in the receiver's time part, after the number of complete minutes has been removed. foo: bar: %000000111033BBB5555558887779AAAAAA220 Pharo is cool3foo1It is always a number or zero:311%printStringBase: b "Return a String representation of this number in base b. For SmallIntegers, it is more efficient to print directly in a String, rather than using a Stream like super." "(10 printStringBase: 10) >>> '10'" "(-10 printStringBase: 10) >>> '-10'" "(10 printStringBase: 2) >>> '1010'" "(10 printStringBase: 16) >>> 'A'" self < 0 ifTrue: [^ '-' , (self negated printStringBase: b)]. self < b ifTrue: [^ String with: (Character digitValue: self)]. ^ self printStringBase: b nDigits: (self numberOfDigitsInBase: b)101021(#(3 9 1) sorted: [:a :b | a >= b ]) >>> #(9 3 1)reciprocal "Return the reciever full of reciprocated elements" "#(1 11 0.5) reciprocal >>> {1 . 1/11 . 2.0}" "{10@20. (1/2)@0.5} reciprocal >>> {((1/10)@(1/20)). (2@2.0)}" ^ self collect: [ :a | a reciprocal ]1$: tokenish >>> true201842second3scaleBy: factorPoint "Answer a Point scaled by factor (an instance of Point)." "(200@200 scaleBy: 2@3) >>> (400@600)" ^(factorPoint x * x) @ (factorPoint y * y)b(1111111111111111110000000002222222222222$mergeSortFrom: startIndex to: stopIndex by: aBlock "Sort the given range of indices using the mergesort algorithm. Mergesort is a worst-case O(N log N) sorting algorithm that usually does only half as many comparisons as heapsort or quicksort." "Details: recursively split the range to be sorted into two halves, mergesort each half, then merge the two halves together. An extra copy of the data is used as temporary storage and successive merge phases copy data back and forth between the receiver and this copy. The recursion is set up so that the final merge is performed into the receiver, resulting in the receiver being completely sorted." "({#a. #b. #z. #d. #i. #l} mergeSortFrom: 3 to: 5 by: [ :a :b | a<=b ]) >>> #(a b d i z l)" self size <= 1 ifTrue: [^ self]. "nothing to do" startIndex = stopIndex ifTrue: [^ self]. [startIndex >= 1 and: [startIndex < stopIndex]] assert. "bad start index" [stopIndex <= self size] assert. "bad stop index" self mergeSortFrom: startIndex to: stopIndex src: self copy dst: self by: aBlock1 | a | ^ a42011a'be:11C(#(10 15 22 789) collect: [:x | x//10] as: Set) >>> #(1 2 78) asSethello4&Answer the receiver raised to aNumber.10.552Like in SQL operation - Split the recievers contents into collections of elements for which keyBlock returns the same results, and return those collections allowed by selectBlock. XXXXXXXXX'(#(1 2 3 4 5) select: #even) >>> #(2 4)219+Tests-unix-64-System-Caching-Tests-Test.xmle3301$1 isDigit >>> true1E('XXaXbXXcXXXdXX' escapeCharacter: $X) >>> 'XXXXaXXbXXXXcXXXXXXdXXXX'#( )1 [ :a :a | a ] '>' expected1e110hello#new isUnary >>> true002131frdthbra12;Tests-unix-64-SystemCommands-PackageCommands-Tests-Test.xmlnXXn%[ "a""b""g" | x "c" "d" y "e" | "f" ]40abs "Absolute value of all elements in the collection" "#(1 -2 -4 0) abs >>> #(1 2 4 0)" "{1@ -2. -4@0} abs >>> {(1@2). (4@0)}" ^ self collect: [:a | a abs]P((Date year: 2018 month: 9 day: 28) addDays: 3) printString >>> '1 October 2018'10311112004455555766A888891 1000000000G('/foo/gloops.taz' asPath basenameWithoutExtension: 'taz') >>> 'gloops'c11520reduceRight: aBlock "Fold the result of the receiver from right to left into aBlock. The argument aBlock must take two or more arguments." "(#(1 2 3) reduceRight: [ :a :b | a - b ]) >>> (1 - (2 - 3))" "(#(1 2 3) reduceRight: [ :a :b | a - b ]) >>> 2" "(#(1 + 3 - 5) reduceRight: [ :a :op :b | a perform: op with: b ]) >>> (1 + (3 - 5))" "(#(1 + 3 - 5) reduceRight: [ :a :op :b | a perform: op with: b ]) >>> -1" | arguments | self emptyCheck. arguments := Array new: aBlock argumentCount. (arguments size = 0 or: [ (self size + 1) \\ (arguments size - 1) > 0 ]) ifTrue: [ self error: 'Collection size and block argument count do not match.' ]. arguments at: arguments size put: self last. self size - arguments size + 1 to: 1 by: 1 - arguments size do: [ :index | arguments replaceFrom: 1 to: aBlock argumentCount - 1 with: self startingAt: index; at: arguments size put: (aBlock valueWithArguments: arguments) ]. ^ arguments last324 2r00101000121(#(3 1 4 2) sorted: [:a :b| a>=b]) >>> #(4 3 2 1) [ :a | | a ]*Return the minimum value of the collection%Tests-unix-64-Geometry-Tests-Test.xml20XsXXXXaeiouSunday=1, ... , Saturday=7#() isNotEmpty >>> false'atWrap: index put: value "Store value into the index'th element of the receiver. If index is out of bounds, let it wrap around from the end to the beginning until it is in bounds. Answer value." "(#(11 22 33) asOrderedCollection atWrap: 2 put: 0; yourself) >>> #(11 0 33) asOrderedCollection" "(#(11 22 33) asOrderedCollection atWrap: 4 put: 0; yourself) >>> #(0 22 33) asOrderedCollection" "(#(11 22 33) asOrderedCollection atWrap: 6 put: 0; yourself) >>> #(11 22 0) asOrderedCollection" ^ self at: index - 1 \\ self size + 1 put: value11140.0)Optimized version of Collection>>#select:TAdd new empty slots to the end of array, while keeping the empty slots at the front.200203;(100@100 isInsideRectangle: (0@0 corner: 100@100))>>> false402.05<(1024 * 1024 * 1024) humanReadableSISizeString >>> '1.07 GB'>([:x :y | x + y] valueWithPossibleArgs: #( 13 12 15)) >>> 25 200(Array with: 1 withAll: #(2 3 4)) >>> #(1 2 3 4)bar:10de64192055stringsdasTestSelector "Converts a method selector into a test selector in form of #testOriginalSelector" "#+ asTestSelector >>> #testPlus" "#+-<> asTestSelector >>> #testPlusMinusLessThanGreaterThan" "#message asTestSelector >>> #testMessage" "#mySelector asTestSelector >>> #testMySelector" "#at:putNext: asTestSelector >>> #testAtPutNext" self isBinary ifTrue: [ ^ (#test, (self flatCollect: [ :each | (((Character specialCharacterNames at: each) copyReplaceAll: '-' with: ' ') substrings collect: #capitalized) joinUsing: ''])) asSymbol ]. ^ (#test, (((self copyReplaceAll: ':' with: ' ') substrings collect: #capitalized) joinUsing: '')) asSymbolreplaceAll: oldObject with: newObject "Replace all occurrences of oldObject with newObject" "({#a. #b. #a. #d. #a} replaceAll: #a with: #e) >>> #(e b e d e)" | index | index := self indexOf: oldObject startingAt: 1 ifAbsent: [0]. [index = 0] whileFalse: [self at: index put: newObject. index := self indexOf: oldObject startingAt: index + 1 ifAbsent: [0]]13142Note: to be syntactically valid as an executable comment, there should be exactly one single triple > message send, and it should be the last statement.i101.0,Tests-unix-64-Spec2-Code-Diff-Tests-Test.xml0vector0qendsWith: suffix caseSensitive: aBoolean "Answer whether the tail end of the receiver is the same as suffix" "IMPLEMENTATION NOTE: following algorithm is optimized in primitive only in case self and suffix are bytes like. Otherwise, if self or suffix are wide strings, then slow version with asLowercase convertation, (primitive is not correct for wide strings)" "('pharo' endsWith: '' caseSensitive: false) >>> true" "('pharo' endsWith: 'project-pharo' caseSensitive: false) >>> false" "('pharo' endsWith: 'phuro' caseSensitive: false) >>> false" "('pharo' endsWith: 'aRo' caseSensitive: false) >>> true" suffix ifEmpty: [ ^ true ]. aBoolean ifTrue: [ ^self endsWith: suffix ]. self size < suffix size ifTrue: [^ false]. (self class isBytes and: [suffix class isBytes]) ifTrue: [ "Optimized version based on primitive" ^ (self findSubstring: suffix in: self startingAt: self size - suffix size + 1 matchTable: CaseInsensitiveOrder) = (self size - suffix size + 1) ]. suffix withIndexDo: [ :each :index | (self at: self size - suffix size + index) asLowercase = each asLowercase ifFalse: [ ^false ] ]. ^true8('salkjsdlkgfeeal' findString: 'al' startingAt: 1) >>> 20Tests-unix-64-EnlumineurFormatter-Tests-Test.xmlb1111111110000000002222222222222 (10.156s round: 2) >>> 10.160s3 !DDD 00EEE0548884449994A0CCC00 FFFe hop-23.45671 #(foo bar) XX n XXX n X18&#(1 2 3 4) & #(1 2 4 6 7) >>> #(1 2 4)100105c 3344435553Answer some indication of how alike the receiver is to the argument, 0 is no match, twice aString size is best score (but see example with 7). Case is ignored. This method is used to help find mistyped variable names in methods.&atAll: indexArray putAll: valueArray "Store the elements of valueArray into the slots of this collection selected by indexArray." "({#x .#y .#z} atAll: #(1 3) putAll: #(a e); yourself) >>> #(a y e)" indexArray with: valueArray do: [:index :value | self at: index put: value]. ^ valueArray6K(Color fromString: '#FFCCAA')>>> (Color r: 1.0 g: 0.8 b: 0.667 alpha: 1.0) {1@2} copyEmpty >>> #()0vector0e1335XXXXXXXXXXXXXX72({3@5. 7@ -4} averageIfEmpty: [0@0]) >>> (5@(1/2))1.51020 [ :a :b | ]capitalized "Return a copy with the first letter capitalized" "'abc' capitalized >>> 'Abc'" | cap | self isEmpty ifTrue: [ ^self copy ]. cap := self copy. cap at: 1 put: (cap at: 1) asUppercase. ^ capcAnswer the angle in radians. Implementation note: use sign in order to catch cases of negativeZero0XXXXXXX### XXn XX nnX00112000000000b101 *- 1 + 1 -- 1 + 1 - -1-2102205124303051459ctoJsonString: object "Return a String with the JSON serialization of object. Note that the object graph can only contain lists (Array) and maps (Dictionary)" "(STON toJsonString: { { #foo->1 } asDictionary. { #bar->2 } asDictionary }) >>> '[{""foo"":1},{""bar"":2}]'" ^ String streamContents: [ :stream | self put: object asJsonOnStream: stream ]202-1 ^ n. n. ^ n44DnextToLast "(#(1 2 3 4) nextToLast) >>> 3" ^self at: self size - 13.2System,Answer the current capacity of the receiver.10Tests-unix-64-Coverage-Test.xml0 ^ n n ^ n 0100000000000002#(x y z) size >>> 31 511111444441 1 sign ; bar1c0~(Array streamContents: [:stream| #(11 22 13) withIndexDo: [ :each :i | stream nextPut: (each * each + i)]]) >>> #(122 486 172)205({10. 20} asSet add: 20; yourself) >>> {10. 20} asSetCasBit "Answer 1 since receiver is true." "true asBit >>> 1" ^ 1111 ppp <<<<>> 'This statement is false!'z0vector0112qPrint elements on a stream separated with a delimiter String like: 'a, b, c' Uses #asString instead of #print:. foo*baz*zort620SEvaluates the argument with the write stream of the collection. Answers the result.foo5051615361003!Return a positive nonzero extent.13.147911.#(aa:bb:"A"cc"B"#aa:bb:cc"C"#cc"D"++"E"#++"F")Perform an action specified as aBlock (with a start and end argument) to each of the indices of the receiver element that have been identified by splitting the receiver using the splitter argument. optimized version for single delimiters.-8.|a| a := #(1 2 3). a asNewArray == a >>> false104[1][2]"a" 1 "b". "c" 2 "d"214[Print the receiver's path on aStream (without 'Path' prepended) using the default delimiter#(().:;[]{}^#a)-('foo*baz*zort' match: 'foobazzort') >>> trueIasBit "Answer 0 since the receiver is false." "false asBit >>> 0" ^ 02AaBbCc13 + foo: - d22[ :a | a5034Tests-unix-64-Refactoring-Environment-Tests-Test.xml XXXXXXXXXXX31 - 1 - 1 abs - 1 - 1 max: -12'n uuuu uuuuu uuu uuuu uuuuu uuuuuuuuuuua3000000rBuild an instance of the receiver by writing elements to a stream. More specifically: blockWithArg will be given a WriteStream on an instance of the receiver. Inside blockWithArg you write elements to the stream to build up the collection. At the end, the contents of the stream up to that point will be returned. Note that the underlying collection grows as needed.0 | Object | Object := 1. ^ Object00322247({#x .#y .#z} atLast: 2 put: #e; yourself) >>> #(x e z)22xy30402Networka11 e210PReturn true whether the receiver is a class (in a couple class/metaclass sense).9(#(10 20 30 40 50) findLast: [ :each | each > 60 ]) >>> 0 2018-09-27000030 5CodeError signal: 'false error'1510020:(#(1 3) detect: #even ifFound: #negated ifNone: [0]) >>> 07('foo' match: 'Foo') >>> trueu(Array streamContents: [:stream | #(1 2 3) reverseWith: #(4 5 6) do: [:a :b | stream nextPut: (a + b)]]) >>> #(9 7 5)1021010'hello''Evaluate twoArgBlock with corresponding elements from this collection and otherCollection. Missing elements from either will be passed as nil.Print the receiver in standard U.S.A format mm/dd/yyyy. Note that the name here is slightly misleading -- the month and day numbers don't show leading zeros, so that for example February 1 1996 is 2/1/96201/2 reciprocal >>> 231Ynot "Negation -- answer true since the receiver is false." "false not >>> true" ^true2!foo: x bar: y "d" "e" ^ x "f" "g"1.00 GB01210#( #[ 0 1000 2 ] )1 foo;242translateBy: delta "Answer a Point translated by delta (an instance of Point)." "((100@200) translateBy: 5@10) >>> (105@210)" ^ (delta x + x) @ (delta y + y)0200(String streamContents: [:s | Character space split: 'Pharo is cool' indicesDo: [ :start :end | s << 's:' << start asString << ' ' << 'e:' << end asString << ' ' ]]) >>> 's:1 e:5 s:7 e:8 s:10 e:13 ' salkjsdlkgfee22false not >>> true102019-08-17T13:33:00+02:00uNote that there is no way to get the first element that works for all kinds of Collections. Must test every one.11e340-1P({10. 20} asSet addAll: {20. 30. 30. 40.}; yourself) >>> {10. 20. 30. 40.} asSetTernary operator: An if-else string can be written with . The N-th argument must be a Boolean. Yes-string cannot contain colon ':', as it terminates the yes-string. No-string cannot contain closing angle bracket '>', as it terminates the no-string.12188 'elvis ' lastSpacePosition >>> 6200231e4!'234' initialIntegerOrNil >>> 234 hello: x1.00 GB2"(true or: [Error signal]) >>> true211102 W01-Welcomela30bstring3FEvaluating disjunction (OR) -- answer true since the receiver is true.100-4A(#(xa xc xz xb xy) sorted: #last ascending) >>> #(xa xb xc xy xz)111not "Negation. Answer true if the receiver is false, answer false if the receiver is true." "true not >>> false" "false not >>> true" self subclassResponsibility foo < + > 4@519[ }Answer the value of trueAlternativeBlock. Execution does not actually reach here because the expression is compiled in-line.:ifNotNil: ifNotNilBlock "Evaluate the block, unless I'm == nil (q.v.). If the receiver is not nil, pass it as argument to the block." "Might be compiled inline for speed, see RBMessageNode>>#isInlineIfNil" "(2 ifNotNil: [ :o | o + 3]) >>> 5" "(nil ifNotNil: [:o | o +3 ]) >>> nil" ^ ifNotNilBlock cull: self1010242B('abcdefgh' includesSubstring: 'de' caseSensitive: false) >>> true201!CCC 00DDD040777000888090BBB00 EEE<('pharo' beginsWith: 'phuro' caseSensitive: false) >>> false11029({10. 20} asOrderedCollection addIfNotPresent: 30) >>> 308 between: 2AAnswer how many of the receiver's elements are equal to anObject.30S ([#() anyOne] on: SubscriptOutOfBounds do: [ :ex | 'whatever' ]) >>> 'whatever' -20 That is true!k(Array streamContents: [:stream | #(1 2 3) reverseDo: [:each | stream nextPut: each + 10]]) >>> #(13 12 11)Z(String streamContents: [ :s | 10 printOn: s base: 10 length: 4 padded: true] ) >>> '0010'35Return the middle element, or as close as we can get.1410nanoSeconds "2 nanoSeconds printString >>> '0:00:00:00.000000002'" "(1 milliSecond + 2 nanoSeconds) printString >>> '0:00:00:00.001000002'" ^ Duration nanoSeconds: self211J(true ifTrue: [ 'This statement is true!' ]) >>> 'This statement is true!'b"Point class instanceSide >>> Point1)Tests-unix-64-Zinc-HTTP-Examples-Test.xml1(100@200) guarded >>> (100@200)723 September 201811210102#(1 2 4) sum >>> 73160209722rx n ssss Xn51MReturn whether the receiver is https://www.compart.com/en/unicode/category/PfaG(#( (2 -3) (4 -5) #(-6)) flatCollect: [ :e | e abs ]) >>> #(2 3 4 5 6)even " 0 even >>> true" " 2 even >>> true" "-2 even >>> true" " 3 even >>> false" "-3 even >>> false" ^(self bitAnd: 1) = 0{ 1. 2 }#(Color red diff: Color red) >>> 0.017* "a" | "b" x "c" | "d" x "e" := "f" 5 "g" cgM('fear is the little death that the.' charactersExactlyMatching: 'the') >>> 0Return a new sequenceable collection which contains the same elements as self but its elements are sorted by aSortBlockOrNil. The block should take two arguments and return true if the first element should preceed the second one. If aSortBlock is nil then <= is used for comparison.v (OrderedDictionary new at: #top at: #below1 put: 1; at: #top at: #below1 put: 2; at: #top at: #below1) >>> 2Xfoo*b"(16rFF digitAt: 1 base: 16) >>> 1511-3.15 3 even >>> false232r1122(1 to: 10 by: 2) stop >>> 10#(#(a b c d) allButLast: 3) >>> #(a)('abc' alike: 'abc') >>> 7.kIf the receiver is not nil, pass it as argument to the ifNotNilBlock block. else execute the nilBlock blocktrue & true >>> true|a:|v( #('if' 'it' 'is' 'to' 'be' 'it' 'is' 'up' 'to' 'me') fold: [:a :b | a, ' ', b] ) >>> 'if it is to be it is up to me'3LOL1.0594630943592953Evaluate aBlock with each of the receiver's elements as the argument. Answer the first element for which aBlock evaluates to true.instanceSide "Return the class of the couple class/metaclass. Useful to avoid explicit test." "Point instanceSide >>> Point" "Point class instanceSide >>> Point" ^ self4((#(x y z) atLast: 1 ifAbsent: #a) >>> #z0210 0: B : B0 00000000000008round: numberOfWishedDecimal "Round the decimal part of the receiver to be limited to the number of wished decimal. Only leave a fixed amount of decimal" "(1/3 round: 2) >>> (33/100) " "(111/100 round: 2) >>> (111/100) " ^self roundTo: (10 raisedTo: numberOfWishedDecimal negated) 00000112221115553333411166777110 X 4a/Answer an Association between self and anObject over index: 7V{'one' -> 1. 'two' ->2} asDictionary >>> (Dictionary with: 'one' -> 1 with: 'two' ->2)9decimalDigitAt: anExponent "Return number that represents digit at given decimal position." "(42 decimalDigitAt: 2) >>> 4" "(42 decimalDigitAt: 1) >>> 2" "It is always a number or zero:" "(1 decimalDigitAt: 2) >>> 0" "Results are not defined non-integer arguments." ^ self digitAt: anExponent base: 10-3 even >>> falsejoinUsing: joiner last: last "Append the elements of the receiver separating them with the joiner argument and handle the last elment separation using the last argument." "(#(1 2 3 4) joinUsing: ', ' last: ' and ') >>> '1, 2, 3 and 4'" (self size = 0) ifTrue: [ ^ '' ]. (self size = 1) ifTrue: [ ^ self first asString ]. ^ last join: (Array with: (joiner join: self allButLast) with: self last)3Refer to the comment in Collection>>#reject:thenDo:21082 0 :B :B | b 0~reduceLeft: aBlock "Fold the result of the receiver from left to right into aBlock. The argument aBlock must take two or more arguments." "(#(1 2 3) reduceLeft: [ :a :b | a - b ])>>> ((1 - 2) - 3)" "(#(1 2 3) reduceLeft: [ :a :b | a - b ]) >>> -4" "(#(1 + 3 - 5) reduceLeft: [ :a :op :b | a perform: op with: b ]) >>> ((1 + 3) - 5)" "(#(1 + 3 - 5) reduceLeft: [ :a :op :b | a perform: op with: b ]) >>> -1" | arguments | self emptyCheck. arguments := Array new: aBlock argumentCount. (arguments size = 0 or: [ (self size + 1) \\ (arguments size - 1) > 0 ]) ifTrue: [ self error: 'Collection size and block argument count do not match.' ]. arguments at: 1 put: self first. 2 to: self size by: arguments size - 1 do: [ :index | arguments replaceFrom: 2 to: arguments size with: self startingAt: index; at: 1 put: (aBlock valueWithArguments: arguments) ]. ^ arguments first0vector02Answer the index of the first occurrence of any element included in aCollection within the receiver. If the receiver does not contain anElement, answer zero, which is an invalid index.03(1 minute + 2 seconds) printString >>> '0:00:01:02'W(#(10 20 10) asOrderedCollection remove: 10; yourself) >>> #(20 10) asOrderedCollection104((#(10 20 10 30) occurrencesOf: 10) >>> 24('abcdefgh' includesSubstring: 'de' at: 1) >>> false-0.98 :. a: foo15G((2989 storeStringBase: 16) copyFrom: 4 to: 6) , ' boy!' >>> 'BAD boy!' 16r4116r41101"result will cover the range [-1,1]nil isEmptyOrNil >>> true22def3.1479longonest longone string1reverseWith: aSequenceableCollection do: aBlock "Evaluate aBlock with each of the receiver's elements, in reverse order, along with the corresponding element, also in reverse order, from aSequencableCollection. " "(Array streamContents: [:stream | #(1 2 3) reverseWith: #(4 5 6) do: [:a :b | stream nextPut: (a + b)]]) >>> #(9 7 5)" self size ~= aSequenceableCollection size ifTrue: [^ self errorSizeMismatch]. self size to: 1 by: -1 do: [:index | aBlock value: (self at: index) value: (aSequenceableCollection at: index)]put: object onStream: writeStream "Write the STON serialization of object to the character writeStream" "(String streamContents: [ :out | STON put: 1@2 onStream: out ]) >>> 'Point[1,2]'" "FileLocator temp / ('{1}.ston' format: { Time millisecondClockValue }) in: [ :file | file writeStreamDo: [ :out | STON put: 1@2 onStream: out ]. file readStreamDo: [ :in | STON fromStream: in ] ]" (self writer on: writeStream) nextPut: object-32.302949083493899AcopyReplaceAll: oldSubstring with: newSubstring asTokens: ifTokens "Answer a copy of the receiver in which all occurrences of oldSubstring have been replaced by newSubstring. ifTokens (valid for Strings only) specifies that the characters surrounding the replacement must not be alphanumeric (space). When ifTokens is set, it means that the replacement will not occur inside word." "('test te string' copyReplaceAll: 'te' with: 'longone' asTokens: true) >>> 'test longone string'" "('test te string' copyReplaceAll: 'te' with: 'longone' asTokens: false) >>> 'longonest longone string'" | aString startSearch currentIndex endIndex | aString := self. startSearch := 1. [(currentIndex := aString indexOfSubCollection: oldSubstring startingAt: startSearch) > 0] whileTrue: [endIndex := currentIndex + oldSubstring size - 1. (ifTokens not or: [(currentIndex = 1 or: [(aString at: currentIndex-1) isAlphaNumeric not]) and: [endIndex = aString size or: [(aString at: endIndex+1) isAlphaNumeric not]]]) ifTrue: [aString := aString copyReplaceFrom: currentIndex to: endIndex with: newSubstring. startSearch := currentIndex + newSubstring size] ifFalse: [ ifTokens ifTrue: [startSearch := currentIndex + 1] ifFalse: [startSearch := currentIndex + newSubstring size]]]. ^ aString1((#(x y z) atLast: 4 ifAbsent: #a) >>> #atrue ==> [false] >>> falseincludes: anObject "Answer whether anObject is one of the receiver's elements." "(#(1 2 2 3 1 1 1) asBag includes: 5) >>> false" "(#(1 2 2 3 1 1 1) asBag includes: 1) >>> true" ^ contents includesKey: anObject10((2@2) - 200) >>> (-198@ -198)2one13!('pharo' beginsWith: '') >>> true0((#(a b c d e) identityIndexOf: #x) >>> 030NConvert the receiver into a colorref, i.e, a number embedding r,g,b on 24 bits600oopselmer is number 3243Grepeat: aNumber "Returns a new string concatenated by itself repeated n times" "('abc' repeat: 3) >>> 'abcabcabc'" aNumber < 0 ifTrue: [ self error: 'aNumber cannot be negative' ]. ^ self species new: self size * aNumber streamContents: [ :stringStream | 1 to: aNumber do: [ :idx | stringStream nextPutAll: self ] ]16 Pharo is coola$('hello' includesAll: 'ho') >>> trueAssertion failed2is'abc' | 'cbe' >>> 'bcea'000011042 {8. 5. 3. 9} sort >>> #(3 5 8 9)Return a setter message from a getter message. Return self if it is already a setter. Pay attention the implementation should be improved to return valid selector.1CAnswer a number that is the maximum of the x and y of the receiver.Wreturns the difference between the max and min element, their positions notwithstandingConsider using any of printStringHex printStringBase: 16 printStringBase: 16 length: 8 padded: true storeStringHex storeStringBase: 16 storeStringBase: 16 length: 11 padded: true0 'abc' > 'def' >>> falseVAnswer the index of the first occurrence of any element included in aCollection after start within the receiver. If the receiver does not contain anElement, answer the result of evaluating the argument, exceptionBlock. Note: it is user responsibility to provide aCollection that behaves relatevily fast when asked for includes: (like a Set)-3.14791s:WJust like do: except that the iteration index supplies the second argument to the block/2 milliSeconds printString >>> '0:00:00:00.002'000000$( isClosePunctuation >>> falsepairsCollect: aBlock "Evaluate aBlock with my elements taken two at a time, and return an Array with the results" "(#(1 'fred' 2 'charlie' 3 'elmer') pairsCollect: [:a :b | b, ' is number ', a printString]) >>> #('fred is number 1' 'charlie is number 2' 'elmer is number 3')" ^ (1 to: self size // 2) collect: [ :index | aBlock value: (self at: 2 * index - 1) value: (self at: 2 * index) ]1110000002e100.0string1^This is implemented using a variant of the normal inject:into: pattern. The reason for this is that it is not known whether we're in the normal number line, i.e. whether 0 is a good initial value for the sum. Consider a collection of measurement objects, 0 would be the unitless value and would not be appropriate to add with the unit-ed objects.S((Date year: 2018 month: 9 day: 28) addMonths: 3) printString>>> '28 December 2018'<{10@20. (1/2)@0.5} reciprocal >>> {((1/10)@(1/20)). (2@2.0)}:(#(a b c d e f) difference: #(a b z k))>>> #(#c #d #e #f)>> 100#between:and: isUnary >>> falseDetails: recursively split the range to be sorted into two halves, mergesort each half, then merge the two halves together. An extra copy of the data is used as temporary storage and successive merge phases copy data back and forth between the receiver and this copy. The recursion is set up so that the final merge is performed into the receiver, resulting in the receiver being completely sorted.Evaluate aBlock for each of the receiver's elements and answer the list of all resulting values flatten one level. Assumes that aBlock returns some kind of collection for each element. Equivalent to the lisp's mapcan100fillFrom: aCollection with: aBlock "Evaluate aBlock with each of aCollections's elements as the argument. Collect the resulting values into self. Answer self." "(#(10 20) asOrderedCollection fillFrom: 'ABC' with: [:x|x asciiValue]) >>> #(10 20 65 66 67) asOrderedCollection" "(#(10 20) asSet fillFrom: 'ABC' with: [:x|x asciiValue]) >>> #(10 20 65 66 67) asSet" "({64->$@} asDictionary fillFrom: 'AB' with: [:x|x asciiValue -> x]) >>> {64->$@. 65->$A. 66->$B} asDictionary" aCollection do: [ :each | self add: (aBlock value: each) ]620.00Unexpected negative weightb100b1Tests-unix-64-NewTools-FileBrowser-Tests-Test.xml5Optimized version of Collection>>#select:thenCollect:(#(a b c d) after: #b) >>> #cletA man, a plan, a canal, panama1c8 #(a b z d) sorted >>> #(a b d z)XX#X#Xn u n1 hello: 23101"(100 beBetween: 12 and: 20) >>> 20foobaz'%' expandMacros >>> ''6(#(1 2 3 4 5) reduce: [ :a :b :c | a + b + c ]) >>> 15aA4;Message sending and code execution - Runtime and Evaluation1213333R('A clear but rather long-winded summary' contractTo: 18) >>> 'A clear ...summary'21#( #( 0 1 2 ) )pharo"Point class instanceSide >>> Point0({10@20. 30@0} collect: [:e | e x]) >>> #(10 30)02232[ | | test4-3g*Return the maximum value of the collection3001120030044500x10(#(10 20 30) collect: [:e| e+1]) >>> #(11 21 31)Append the elements of the receiver separating them with the joiner argument and handle the last elment separation using the last argument.14!(10 printStringBase: 10) >>> '10'11002033^Nonevaluating conjunction -- answer the value of alternativeBlock since the receiver is true.c Point[1,2]330xjAnswer an array of non-empty substrings from the receiver separated by one or more whitespace characters.0.5[ | | ]YCreate a dictionary from the keys and values arguments which should have the same length.141-10.(Color h: 0 s: 1 v: 1 alpha: 1) >>> Color red 1.0!((100@200) < (330@100)) >>> falsefoo23baz #(10 20) emptyCheck >>> #(10 20)10#u u. 0 :B | X b b XX b 0. X X0 highBit >>> 01{The material conditional, also known as the material implication or truth functional conditional. Correspond to not ... or ... and does not correspond to the English if...then... construction. known as: b if a a implies b if a then b b is a consequence of a a therefore b (but note: 'it is raining therefore it is cloudy' is implication; 'it is autumn therefore the leaves are falling' is equivalence). Here is the truth table for material implication: p | q | p ==> q -------|-------|------------- T | T | T T | F | F F | T | T F | F | T Sbefore: target "Answer the receiver's element immediately before target. Raise an error if target is not an element of the receiver, or if there are no elements before it (i.e. it is the first element)." "(#(11 22 33) before: 22) >>> 11" "(#(11 22 33) before: 33) >>> 22" ^ self before: target ifAbsent: [self errorNotFound: target]22({1. $a. $a. 3} as: RunArray) values >>> #(1 $a 3)isSymbol45BAnswer the index of the high order bit of the receiver, or zero if the receiver is zero. Raise an error if the receiver is negative, since negative integers are defined to have an infinite number of leading 1's in 2's-complement arithmetic. Use >>highBitOfMagnitude if you want to get the highest bit of the magnitude.lastIndexOf: anElement startingAt: lastIndex ifAbsent: exceptionBlock "Answer the index of the last occurrence of anElement within the receiver. If the receiver does not contain anElement, answer the result of evaluating the argument, exceptionBlock." "(#(a b a d a) lastIndexOf: #a startingAt: 1 ifAbsent: 7) >>> 1" "(#(e b a d e) lastIndexOf: #a startingAt: 4 ifAbsent: 7) >>> 3" lastIndex to: 1 by: -1 do: [:index | (self at: index) = anElement ifTrue: [^ index]]. ^ exceptionBlock value201.04 #'hello''X X21 ; 20 Snick asFile Files Snick's Snick#(2 6 7) average >>> 5 3book-result/W01-Welcome%1 second printString >>> '0:00:00:01'50vector0JRunning max. See the comment of self >> #running:of: for more information.21100000000000003b200 nnnnnuuuun ssss n 00111111112222222223334455506770sum "This is implemented using a variant of the normal inject:into: pattern. The reason for this is that it is not known whether we're in the normal number line, i.e. whether 0 is a good initial value for the sum. Consider a collection of measurement objects, 0 would be the unitless value and would not be appropriate to add with the unit-ed objects." "#(1 2 4) sum >>> 7" "([#() sum] on: CollectionIsEmpty do: ['oops']) >>> 'oops'" "sum works with objects that understands + and - messages, like Points" "{1@5. 2@3. 4@7} sum >>> (7@15)" "or even Collections" "#((1 5 1) (2 3 3) (4 7 2)) sum >>> #(7 15 6)" | sum sample | self emptyCheck. sample := self anyOne. sum := self inject: sample into: [ :accum :each | accum + each ]. ^ sum - sample111020z12{10@20. 30@0} \\ {1@3. 4.0@1} >>> {(0@2). (2.0@0)}foo: Object ^ Object + 12Tests-unix-64-Collections-Unordered-Tests-Test.xml3Returns whether the receiver contains the argument.11one(1/3.0s round: 4) >>> 0.3333s4 20415three[{"foo":1},{"bar":2}]40:y "Answer the y coordinate." "(100@200) y >>> 200" ^ yB(String streamContents: [:s| #() printElementsOn: s]) >>> '()'5(false ifTrue: [ 'This statement is true!' ]) >>> nil42pharo10| aBoolean "Evaluating disjunction (OR) -- answer true since the receiver is true." "true | true >>> true" "true | false >>> true" ^self2z0Absolute value of all elements in the collectionyAnswer my value constrained to the interval [minValue ; maxValue] I take care of the situation where minValue > maxValue+Tests-unix-64-NewValueHolder-Tests-Test.xml#foo keywords >>> #('foo')93baa3343-400110004422223006655570vector0eX 3.1451 (#(a b c d e) indexOf: #c) >>> 321QmonthIndex "(Date year: 2018 month: 9 day: 28) monthIndex >>> 9" ^ super month10vector015('salkjsdlkgfee' findString: 'al'startingAt: 3) >>> 00vector01#[1]#[2]100000000000000002(Tests-unix-64-DebugPoints-Tests-Test.xmlmobazo211nnnnnnnn3222214Treat myself as the coeficients of a polynomial in X. Evaluate it with thisX. First element is the constant and last is the coeficient for the highest power. #(1 2 3) polynomialEval: 2 is 3*X^2 + 2*X + 1 with X = 2-2.571391.211713IMPLEMENTATION NOTE: following algorithm is optimized in primitive only in case self and prefix are bytes like. Otherwise, if self is wide, then super outperforms, Otherwise, if prefix is wide, primitive is not correct1003'2 between: ( 1 and: 4)' findSelector >>> #between:match: text "Answer whether text matches the pattern in this string. Matching ignores upper/lower case differences. Where this string contains #, text may contain any character. Where this string contains *, text may contain any sequence of characters." "('*' match: 'zort') >>> true" "('*baz' match: 'mobaz') >>> true" "('*baz' match: 'mobazo') >>>false" "('*baz*' match: 'mobazo') >>> true" "('*baz*' match: 'mozo') >>> false" "('foo*' match: 'foozo') >>> true" "('foo*' match: 'bozo') >>> false" "('foo*baz' match: 'foo23baz') >>> true" "('foo*baz' match: 'foobaz') >>> true" "('foo*baz' match: 'foo23bazo') >>> false" "('foo' match: 'Foo') >>> true" "('foo*baz*zort' match: 'foobazort') >>> false" "('foo*baz*zort' match: 'foobazzort') >>> true" "('*foo#zort' match: 'afoo3zortthenfoo3zort') >>> true" "('*foo*zort' match: 'afoodezortorfoo3zort') >>> true" ^ self startingAt: 1 match: text startingAt: 1"a" #[ "b" 1 "c" 2 "d" ] "e"30includesSubstring: substring at: index "Answer true if the receiver contains the substring str exactly at index, false otherwise." "('abcdefgh' includesSubstring: 'de' at: 1) >>> false" "('abcdefgh' includesSubstring: 'de' at: 4) >>> true" | pos | pos := index - 1. ^ index > 0 & (self size - pos >= substring size) and: [ substring allSatisfy: [ :char | pos := pos + 1. (self at: pos) = char ] ]530| a a | a := 10. ^ a239743r123452"atLast: indexFromEnd ifAbsent: block "Return element at indexFromEnd from the last position. atLast: 1 ifAbsent: [] returns the last element" "(#(x y z) atLast: 1 ifAbsent: #a) >>> #z" "(#(x y z) atLast: 4 ifAbsent: #a) >>> #a" ^ self at: self size + 1 - indexFromEnd ifAbsent: blockAnswer a representative sample of the receiver. It raises an error when the collection is empty. This method can be helpful when needing to preinfer the nature of the contents of semi-homogeneous collections.isDashPunctuation "Return whether the receiver is one of these characters: $-" "$- isDashPunctuation >>> true" "$_ isDashPunctuation >>> false" ^ self characterSet isDashPunctuation: selfshuffleBy: aRandom "Durstenfeld's version of the Fisher-Yates shuffle" "({1. 2. 3. 4. 5} shuffleBy: (Random seed: 42)) >>> #(1 2 5 4 3)" self size to: 2 by: -1 do: [ :i | self swap: i with: (aRandom nextInteger: i) ]theyAnswer the value of alternativeBlock. Execution does not actually reach here because the expression is compiled in-line.42I('hello' collect: #asciiValue into: Set new) >>> #(104 101 108 111) asSet?Search for an element in the receiver using binary search. The argument aBlock is a one-element block returning 0 - if the element is the one searched for <0 - if the search should continue in the first half >0 - if the search should continue in the second half If no matching element is found, raise an error.7Parse and materialize the STON representation in string5021255-((10 to: 13) copyWithout: 11) >>> #(10 12 13), -4143. pppp AAA ^ 0 1 2 3 aaa 3 2 s 2 3 n 3 2 1 0 . 51 [:a| | |b]11abcXs #( 0 1 r2 4 )>> {(1@0). (-1@1). (0@ -1)}24Evaluate aBlock with the elements of the receiver. If aBlock returns true for any element return true. Otherwise return false.0foo "a" < "b" bar "c" > "d" < "e" baz "f" > "g" 3.0sde1i(#(10 20 10 30 10) asOrderedCollection removeAll: #(10 10 20); yourself) >>> #(30 10) asOrderedCollection9710'Return whether the receiver is a digit.40foo2u u. 0 :B X 0. u u0001111100044444333500| a ||a'hello'4(#(1 2 3) reduce: [ :a :b | a + b ]) >>> (1 + 2 + 3)aR((OrderedCollection new add: 42; yourself) add: 43; yourself) asArray >>> #(42 43)'({1. 2. 3} as: Set) >>> #( 1 2 3) asSet6AB1Optimized to go through the primitive if possible-233100oops(3.1479 roundUpTo: 0.1) >>> 3.22cHellod% pppp AAA ^ aaa ssss aaa s n ; sss . 5JExecutes aBlock on each of the receiver's elements except for the last one520(10.199999999 round: 2) >>>10.20.010EMight be compiled inline for speed, see RBMessageNode>>#isInlineIfNilw312550 00355544666020101233342233$a isLetter >>> true02c1.07 GB'hello$$200fghi1450September 2018p(String streamContents: [:s | #(1 2 3) do: [:each | s << each asString] separatedBy: [s << ', ']]) >>> '1, 2, 3'10 """""n"""""" between: 1542285100.102split: aSequenceableCollection "Split the argument using the receiver as a separator." "optimized version for single delimiters" "($/ split: '/foo/bar')>>>#('' 'foo' 'bar') asOrderedCollection" "([:c| c isSeparator] split: 'aa bb cc dd')>>> #('aa' 'bb' 'cc' 'dd') asOrderedCollection" | result | result := OrderedCollection new: aSequenceableCollection size //2. self split: aSequenceableCollection do: [ :item | result add: item ]. ^ resultstring3OCreate a color with the given hue, saturation, brightness, and alpha. Hue is given as the angle in degrees of the color on the color circle where red is zero degrees. Saturation and brightness are numbers in [0.0..1.0] where larger values are more saturated or brighter colors. For example, (Color h: 0 s: 1 v: 1 alpha: 1) is pure red.7(RPackage named: 'MockPackage') isTestPackage >>> false3028oReturn index of first element that satisfies aBlock. If no matching element is found, evaluate exceptionBlock.-101241u u. X X X. X X6' test test' withSeparatorsCompacted >>> ' test test'21?(STON fromString: '#foo : 100') class >>> STON associationClass1 short enough4addIfNotPresent: anObject "Include anObject as one of the receiver's elements, but only if there is no such element already. Anwser anObject." "({10. 20} asOrderedCollection addIfNotPresent: 30) >>> 30" "({10. 20} asOrderedCollection addIfNotPresent: 30; yourself) >>> ({10. 20. 30} asOrderedCollection)" "({10. 20} asOrderedCollection addIfNotPresent: 20; yourself) >>> ({10. 20.} asOrderedCollection)" (self includes: anObject) ifFalse: [ self add: anObject ]. ^ anObject29(#(11 22 33) atWrap: 3) >>> 3329(42 digitAt: 2 base: 10) >>> 41it'em1 decimalDigitLength >>> 1,(#(a b c d e) indexOf: #x ifAbsent: 7) >>> 711'FFF 00GGG044999464AAA4B0DDD000EEE00 HHHW('a000' asWideString ~= (ByteArray with: 97 with: 0 with: 0 with: 0) asString) >>> true2-1.5-1i(String streamContents: [:s| { 10. 'hello'. $x } printOn: s delimiter: ', ']) >>> '10, ''hello'', $x'def3Do nothing on purposeD(RPackage named: 'MockPackage-Tests-Package') isTestPackage >>> trueVariable name expecteddjasStringOn: aStream delimiter: delimString "Print elements on a stream separated with a delimiter String like: 'a, b, c' Uses #asString instead of #print:." "(String streamContents: [:s| 'abcd' asStringOn: s delimiter: '->']) >>> 'a->b->c->d'" self do: [ :elem | aStream nextPutAll: elem asString ] separatedBy: [ aStream nextPutAll: delimString ]#hello fred the bear6:b2 rounded >>> 2>isExtension "I return true if a method is an extension method. Which means that the methods is not packaged in the package of the class containing the method, but in another package." "(self >> #selector) isExtension >>> false" "(self >> #traitSource) isExtension >>> true" ^ self hasProperty: #extensionPackage3.1*#(1 2 3 4) unzip second asArray >>> #(2 4)1111002234znak ::x43 ') _ : 2>> 'zk cd zk ef zk'" | idx | self = oldSubstring ifTrue: [ ^ newSubstring copy ]. oldSubstring isEmpty ifTrue: [ ^ self copy ]. idx := 1. ^ self species new: self size streamContents: [ :stream | | foundIdx | [ (foundIdx := self findString: oldSubstring startingAt: idx) isZero ] whileFalse: [ stream next: (foundIdx - idx) putAll: self startingAt: idx; nextPutAll: newSubstring. idx := foundIdx + oldSubstring size ]. idx <= self size ifTrue: [ stream next: (self size - idx + 1) putAll: self startingAt: idx ] ](100 @ -200) abs >>> (100@200)20oEnumerate all elements in the receiver. Execute aBlock for those elements that are not equal to the given item1082(#(1 1 2 2 3 3) runningMin: 3) >>> {1 . 1 . 2 . 2}6<(1000 * 1000 * 1000) humanReadableSISizeString >>> '1.00 GB'[ a: ]a213710, 15, 20, 25931111200445555555766A88889[ :aaa :bbb | | ccc ddd | aaa ]428Create a color with the given hue, saturation, and lightness. Hue is given as the angle in degrees of the color on the color circle where red is zero degrees. Saturation and lightness are numbers in [0.0..1.0] where larger values are more saturated or lighter colors. The difference with brightness in the HSV coordinates is that colors go from black at lightness 0, through vivid hues at lightness 0.5, to white at lightness 1. For example, (Color h: 0 s: 1 l: 0.5) is pure red. Answer the index of the low order one bit. First we skip bits in groups of 8, then do a lookup in a table. While not optimal, this is a good tradeoff; long integer #lowBit always invokes us with bytes.103115pharoDocCommentNodes "Return a collection of pharo comment nodes: expressions following the pattern" "true >>> true" ^ self comments flatCollect: [:each | each pharoDocCommentNodes]charlie is number 2201true & false >>> false2zAnswer whether the receiver sorts after or equal to aString. The collation order is simple ascii (with case differences).Missing opener for closer: }classNameKey "Return the key that will be used to add a property with the class name when an unknown class is read and the option STONReader>>#acceptUnknownClasses: is true, by default #className. Such unknown classes are returned as generic maps." "((STON reader acceptUnknownClasses: true; on: 'FooBarBaz { #foo : 100 }' readStream; next) at: STON classNameKey) >>> #FooBarBaz" ^ #className 2222223333330.0255zkTools141.2FooBarBaz { #foo : 100 }1b10! pppp AAA pppp AAA ^ aaa s aaa . 3.1230:00:00:00.0000000022010307((0@0 corner: 100@100) containsPoint: 100@50) >>> false#(1 1 1 1) argmax >>> 11s1 s1dee1)Optimized version of Collection>>#reject:200vector011XXXXXXXXXXXXXXXXXXXXXXXXXX223244540.0$#( #':=' aa: #= #':=' #= cc: #'==' )222YCreate a dictionary from the keys and values arguments which should have the same length.0vector0 'abc' < 'abc' >>> falsee:140 XX n XX# n X@foo:5Abc1 ppp < <<<<<Return whether the receiver is close to the argument aPoint. The precision for point holding floats is defined by Float >> #closeTo:precision:. For points holding integer, closeTo: corresponds to equalsTo:&2 minutes printString >>> '0:00:02:00'e40%((1 to:9 by:2) includes: 4) >>> false112 hexString >>> '16rC'pairsDo: aBlock "Evaluate aBlock with my elements taken two at a time. If there's an odd number of items, ignore the last one. Allows use of a flattened array for things that naturally group into pairs. See also pairsCollect:" "(Array streamContents: [:s | #(1 'fred' 2 'charlie' 3 'elmer') pairsDo: [:a :b | s nextPut: b; nextPut: a]]) >>> #('fred' 1 'charlie' 2 'elmer' 3)" 1 to: self size // 2 do: [ :index | aBlock value: (self at: 2 * index - 1) value: (self at: 2 * index) ]0303 Answer 1 since receiver is true.530p(#(10 20) asOrderedCollection fillFrom: 'ABC' with: [:x|x asciiValue]) >>> #(10 20 65 66 67) asOrderedCollection6y030sortedElements "Answer with a collection of elements with counts, sorted by element." "#(1 2 2 3 1 1 1) asBag sortedElements >>> {1->4. 2->2. 3->1}" ^contents associations sort; yourself '' size >>> 08333333323 That is true!16300100031.9283901234902349 Point[1,2](24 min: 20 max: 5) >>> 20VNegation. Answer true if the receiver is false, answer false if the receiver is true.|isSorted "Return true if the receiver is sorted by the given criterion. Optimization for isSortedBy: [:a :b | a <= b]." "#(1 2 3) isSorted >>> true" "#(1 2 3 0) isSorted >>> false" | lastElm elm | self isEmpty ifTrue: [^ true]. lastElm := self first. 2 to: self size do: [:index | elm := self at: index. lastElm <= elm ifFalse: [^ false]. lastElm := elm]. ^ true[ ,Refer to the comment in Collection|collect:.yh: hue s: saturation l: lightness "Create a color with the given hue, saturation, and lightness. Hue is given as the angle in degrees of the color on the color circle where red is zero degrees. Saturation and lightness are numbers in [0.0..1.0] where larger values are more saturated or lighter colors. The difference with brightness in the HSV coordinates is that colors go from black at lightness 0, through vivid hues at lightness 0.5, to white at lightness 1. For example, (Color h: 0 s: 1 l: 0.5) is pure red." " (Color h: 0 s: 1 l: 0.5) >>> (Color r: 1 g: 0 b:0)" ^ self h: hue s: saturation l: lightness alpha: 1.04Return the number of combinations of (self) elements taken k at a time. It is calculated as C(n,k) = n! / (k! (n-k)!) For 6 numberOfCombinationsTaken: 3, this is 6*5*4 / (1*2*3)* ( [ :aaa : bbb | | ccc ddd | aaa . ] ) . 0225636toverlappingPairsWithIndexDo: aBlock "Emit overlapping pairs of my elements into aBlock, along with an index." "(Array streamContents: [:stream | #(10 20 30 40) overlappingPairsWithIndexDo: [:first :second :index| stream nextPut: (first + second + index)]]) >>> #(31 52 73)" 1 to: self size - 1 do: [:i | aBlock value: (self at: i) value: (self at: i + 1) value: i ]154g-888 00999000AAA030BBB000FFF0C0GGG000III00 JJJc pharo-project5('*foo#zort' match: 'afoo3zortthenfoo3zort') >>> true30101(Array streamContents: [:stream | (1 to: 3) permutationsDo: [:each | stream nextPut: each copy]]) >>> #(#(1 2 3) #(1 3 2) #(2 1 3) #(2 3 1) #(3 2 1) #(3 1 2))$a isAlphaNumeric >>> trueb31-1 - 1abs-1 - 1max:-1 'hello''world101'abc' capitalized >>> 'Abc', sort "Sort this collection into ascending order using the '<=' operator." "{8. 5. 3. 9} sort >>> #(3 5 8 9)" "{#a. #b. #z. #d} sort >>> #(a b d z)" self sort: [:a :b | a <= b]0111188126!Character cr isSeparator >>> trueSort the given range of indices using the mergesort algorithm. Mergesort is a worst-case O(N log N) sorting algorithm that usually does only half as many comparisons as heapsort or quicksort.1(true or: [false]) >>> true' ' asLowercase >>> ' '('pharo' endsWith: '') >>> true4#((2@2) - (100@200)) >>> (-98@ -198)2 foo < bar: 3Evaluate aBlock with the elements of the receiver. If aBlock returns false for any element return false. Otherwise return true.215199130de- arg "Pairwise difference of two sequenceable collections of the same length." "#(10 20 30) - #(0 1 2) >>> #(10 19 28)" "{10@20. 30@0} - {0@1. 2@3} >>> {(10@19). (28@ -3)}" ^ arg adaptToCollection: self andSend: #-10vector0202004Tests-unix-64-Tool-DependencyAnalyser-Tests-Test.xml43 [ 1 ). 2 ]60hll1hslSaturation "Return the HSL saturation of this color, a value between 0.0 and 1.0." "Color red hslSaturation >>> 1.0" "(Color r: 0.5 g: 0.5 b: 1) hslSaturation >>> 1.0" | chroma | chroma := self chroma. "Chroma is zero for black and white, which are the two cases of division by zero below." chroma isZero ifTrue: [ ^ chroma ]. ^ chroma / (1.0 - (self lightness * 2.0 - 1.0) abs)60vector070100112e:8Tests-unix-64-MetacelloCommandLineHandler-Tests-Test.xml<(Date year: 2018 month: 9 day: 28) yyyymmdd >>> '2018-09-28'tAnswer a new collection like the receiver which contains all elements of the receiver at the indices of indexArray.>($/ split: '/foo/bar')>>>#('' 'foo' 'bar') asOrderedCollection"#(a b c d e f g h i) second >>> #b1330 hex >>> '16r1E'occurrencesOf: anObject "Answer how many of the receiver's elements are equal to anObject." "(#(1 2 2 3 1 1 1) asBag occurrencesOf: 1) >>> 4" ^ (self includes: anObject) ifTrue: [ contents at: anObject] ifFalse: [ 0 ]xbxc>(#(a b a d a) lastIndexOf: #a startingAt: 1 ifAbsent: 7) >>> 11f, o, o$} isControlOther >>> false20.3333s42 factorial >>> 201 [ :a :a :b | | a a b | a + a + b0 :BBBBBB | bbbbbb s n 03 a: . :#( #[ 0 1 2 ] )4me100If the write position of stream is at the end of the internal buffer of stream (originalContents), we can return it directly instead of making a copy as contents would do hello world0vector012018printStringHex "Returns the hex digit part of the integer when printed in hexadecimal format." "30 printStringHex >>> '1E'" "30 hex >>> '16r1E'" ^ self printStringBase: 16 XXXXXXXXXXXX41abc102printOn: stream base: base length: minimumLength padded: padWithZeroes "Return a String representation of this number in base b with a minimum length and padded by 0 if zeroFlag is set" "(String streamContents: [ :s | 10 printOn: s base: 10 length: 4 padded: true] ) >>> '0010'" "(String streamContents: [ :s | -10 printOn: s base: 10 length: 4 padded: true] ) >>> '-010'" | n numberOfDigits totalLength divisor | self < 0 ifTrue: [ n := self negated. totalLength := 1 ] ifFalse: [ n := self. totalLength := 0 ]. numberOfDigits := n numberOfDigitsInBase: base. totalLength := totalLength + numberOfDigits. padWithZeroes ifFalse: [ [ totalLength < minimumLength ] whileTrue: [ stream space. totalLength := totalLength + 1 ] ]. n = self ifFalse: [ stream nextPut: $- ]. padWithZeroes ifTrue: [ [ totalLength < minimumLength ] whileTrue: [ stream nextPut: $0. totalLength := totalLength + 1 ] ]. divisor := (base raisedToInteger: numberOfDigits - 1). [ divisor > 0 ] whileTrue: [ | digit | digit := n // divisor. stream nextPut: ('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' at: digit + 1). n := n - (digit * divisor). divisor := divisor // base ]61+Answer whether the receiver is a ByteString1zRound the decimal part of the receiver to be limited to the number of wished decimal. Only leave a fixed amount of decimal heLlo wOrLdabcd0d1 max: 2;atPin: index "Return the index'th element of me if possible. Return the first or last element if index is out of bounds." "(#(w x y z) atPin: 2) >>> #x" "(#(w x y z) atPin: 4) >>> #z" "(#(w x y z) atPin: 8) >>> #z" index < 1 ifTrue: [^ self first]. index > self size ifTrue: [^ self last]. ^ self at: index41$A isCasedLetter >>> false8e#Tests-unix-64-Traits-Tests-Test.xmlc:d(Array streamContents: [ :out | out nextPut: 1; nextPutAll: #(2 3 4); nextPut: 5 ]) >>> #(1 2 3 4 5)19Evaluate aBlock with each of the receiver's elements as the argument. If some element evaluates aBlock to true, then cull this element into foundBlock. If no element matches the criteria then do nothing. Always returns self to avoid misuse and a potential isNil check on the sender.103,123pharo 'def' >= 'abc' >>> true152*2222111111111335563311111111117799A7700BBC-(3 ifNil: [42] ifNotNil: [:o | o +3 ]) >>> 61!#(a b c d e f g h i) sixth >>> #f212332#( #( 0 1 r2 3 ) )2 Point[1,2]1$) isControlOther >>> false100That is false!11200.912197413-1d20O( #(1 2 3 4 5) asSet reduce: [ :a :b :c | a + b + c ] ) >>> (1 + 2 + 3 + 4 + 5)28 August 20181| super | super := 1. ^ super0vector01Return the index of the argument in the receiver, only elements after the start of the element are considered zero if not present.51152iReturn the stop element of an interval. Pay attention this is not necessary the same as the last element.4TReturn true whether the receiver is a metaclass (in a couple class/metaclass sense). . #( foo bar )[ :a | 0nXn002 ceiling "Answer a Point that is the receiver's x and y ceiling. Answer the receiver if its coordinates are already integral." "(100@200) ceiling >>> (100@200)" "(100.1@200.9) ceiling >>> (101@201)" self isIntegerPoint ifTrue: [ ^ self ]. ^ x ceiling @ y ceilingfromRgbTriplet: list "Return a color from its RGB components (0 - 1.0 floats)" "(Color colorFrom: #(1.0 1.0 1.0)) >>> (Color white)" ^ self r: list first g: list second b: list last1 sign; 50d,Tests-unix-64-PharoDocComment-Tests-Test.xml19iAnswer the index of anElement within the receiver. If the receiver does not contain anElement, answer 0.11p(Array streamContents: [:stream | #(10 20 30 40) from: 2 to: 3 do: [:each | stream nextPut: each]]) >>> #(20 30)J#(1 2 2 3 1 1 1) asBag cumulativeCounts >>> {57.1->1 . 85.7->2 . 100.0->3}FSupport collection enumeration with a counter, even though not ordered0nnnuu3 ||| aworld>Returns an array composed of the three color float components.10+first method faster from 27 accesses and on16645r('File asFile Files File''s File' copyReplaceTokens: 'File' with: 'Snick') >>> 'Snick asFile Files Snick''s Snick'11171 October 201814(#(1 2) allSatisfy: [ :each | each even ]) >>> false[ | ]foozop(Array streamContents: ([:stream | #(1 2 3) do: [:each | stream nextPut: (each + 10)] without: 2])) >>> #(11 13)52 between: 0 and: 4h+Tests-unix-64-EpiceaBrowsers-Tests-Test.xml30 printStringHex >>> '1E'groupsOf: n atATimeCollect: aBlock "Evaluate aBlock with my elements taken n at a time. Ignore any leftovers at the end. Allows use of a flattened array for things that naturally group into groups of n. If aBlock has a single argument, pass it an array of n items, otherwise, pass the items as separate arguments. See also pairsDo:" "(#(16 17 17 16 18 17 18 19 19 19 18 19 19 20 19 20 19 20 20 20 19 20) groupsOf: 7 atATimeCollect: [ :x | x ]) >>> #(#(16 17 17 16 18 17 18) #(19 19 19 18 19 19 20) #(19 20 19 20 20 20 19))" "(#(1 1 1 10 10 10 100 100 100) groupsOf: 3 atATimeCollect: [ :x :y :z | x + y + z]) >>> #(3 30 300)" "(#(1 1 1 10 10 10 100 100 100) groupsOf: 3 atATimeCollect: [ :x | x ]) >>> #(#(1 1 1) #(10 10 10) #(100 100 100))" | passArray | passArray := aBlock numArgs <= 1. ^ (n to: self size by: n) collect: [ :index | | args | args := (self copyFrom: index - n + 1 to: index) asArray. passArray ifTrue: [ aBlock value: args ] ifFalse: [ aBlock valueWithArguments: args ] ]3100a311112004445484400B9999A!('*baz*' match: 'mozo') >>> false20G(#('abc' 'de' 'fghi') sorted: #size ascending) >>> #('de' 'abc' 'fghi')E(OrderedCollection new add: 42; yourself) class >>> OrderedCollection 10000000000asByteArray "Convert to a ByteArray with the ascii values of the string." "'a' asByteArray >>> #[97]" "'A' asByteArray >>> #[65]" "'ABA' asByteArray >>> #[65 66 65]" | b | b := ByteArray new: self byteSize. 1 to: self size * 4 do: [:i | b at: i put: (self byteAt: i)]. ^ b8&((100@200) min: (30@400)) >>> (30@200)13.140 r ###'helloPut anObject in all indexes between startIndex and endIndex. Very fast. Faster than to:do: for more than 26 positions. Answer anObject11510000000000000000d>|s| s:=0. #(10 20 30) do: [:each | s := s + each]. s >>> 60_(#(11 22 33) asOrderedCollection atWrap: 4 put: 0; yourself) >>> #(0 22 33) asOrderedCollection202-45 | T | X t)Fold the result of the receiver into aBlock. The argument aBlock must take two or more arguments. It applies the argument, binaryBlock cumulatively to the elements of the receiver. For sequenceable collections the elements will be used in order, for unordered collections the order is unspecified.'A' asByteArray >>> #[65][:22#[ ^ 1 ]:storeOn: aStream "Print inside string quotes, doubling inbedded quotes." "(String streamContents: [ :s | 'Foo''Bar' storeOn: s ]) >>> '''Foo''''Bar'''" | x | aStream nextPut: $'. 1 to: self size do: [ :i | aStream nextPut: (x := self at: i). x = $' ifTrue: [ aStream nextPut: x ] ]. aStream nextPut: $'c]xor: alternativeBlock "Nonevaluating conjunction. If the receiver is true, answer the opposite of the the argument, alternativeBlock; otherwise answer the value of the alternativeBlock." "(true xor: [true]) >>> false" "(true xor: [false]) >>> true" "(false xor: [true]) >>> true" "(false xor: [false]) >>> false" self subclassResponsibilityz7(#(a b c d e) indexOfAnyOf: #(x y c) ifAbsent: 7) >>> 310.156s11tazziggie21223 Not foundfifth "Answer the fifth element of the receiver. Raise an error if there are not enough elements." "#(a b c d e f g h ) fifth >>> #e" ^ self at: 5((#(a b c d e) identityIndexOf: #c) >>> 3 <1s> vs <1p>1((4 to: 50 by: 2) anySatisfy: #isPrime) >>> false1he'lloe0vector01'Color red rgbTriplet >>> #(1.0 0.0 0.0)40302This method adds such decision to concrete kind of local scope which allows to use scopes to restrict visibility of class hierarchyreverseDo: aBlock "Evaluate aBlock with each of the receiver's elements as the argument, starting with the last element and taking each in sequence up to the first. For SequenceableCollections, this is the reverse of the enumeration for do:." "(Array streamContents: [:stream | #(1 2 3) reverseDo: [:each | stream nextPut: each + 10]]) >>> #(13 12 11)" self size to: 1 by: -1 do: [:index | aBlock value: (self at: index)]| | aatWrap: index "Answer the index'th element of the receiver. If index is out of bounds, let it wrap around from the end to the beginning until it is in bounds." "(#(11 22 33) asOrderedCollection atWrap: 2) >>> 22" "(#(11 22 33) asOrderedCollection atWrap: 4) >>> 11" "(#(11 22 33) asOrderedCollection atWrap: 5) >>> 22" ^ self at: index - 1 \\ self size + 10.012Unitialized variable3Repeatedly value aBlock with a single Array. Adjust the collection so that aBlock is presented all (self size raisedTo: anInteger) possible combinations of the receiver's elements taken as digits of an anInteger long number.0 factorial >>> 133.14150 slowFactorial >>> 16it'em vs 'it''em'2*splitOn: splitter "Split a collection of objects based on a splitter. splitter - can be a subsequence, a Block or a Regex (String receiver only). Any other object used as a splitter is treated as an Array containing that object." "(#(1 2 3 3 4 1 2 3 5 4 6) splitOn: 4) >>> #(#(1 2 3 3) #(1 2 3 5) #(6))asOrderedCollection" "(#(1 2 3 3 4 1 2 3 3 5 6) splitOn: #(3 3)) >>> #(#(1 2) #(4 1 2) #(5 6)) asOrderedCollection" "(#(2 2 3 3 4 1 2 3 3 5) splitOn: [:each | each > 3])>>> #(#(2 2 3 3) #(1 2 3 3) #()) asOrderedCollection" ^ splitter split: self600'' ''h'' ' withoutQuoting >>> ' ''h'' 'C('hello' collect: #asciiValue as: Array) >>> #(104 101 108 108 111)abc29 0000000002fghi10Ymodulo. Remainder defined in terms of //. Answer a Number with the same sign as aNumber.132XXXXuhello1Hello13wReturn the object stored in the second dictionary at secondKey. The second dictionary is accessed via the key firstKey.1#+ asTestSelector >>> #testPlus&(AsciiCharset toLowercase: $a) >>> $a.1261&noise: xin y: yin z: zin "(NSPerlinNoise2 new noise: 3.14 y: 42 z: 7) >>> 0.13691995878400012" | x0 y0 z0 x y z u v w a aa ab b ba bb | x0 := xin floor & 255. y0 := yin floor & 255. z0 := zin floor & 255. x := xin - xin floor. y := yin - yin floor. z := zin - zin floor. u := self fade: x. v := self fade: y. w := self fade: z. a := (p at: x0)+y0. aa := (p at: a)+z0. ab := (p at: a+1)+z0. b := (p at: x0+1)+y0. ba := (p at: b) + z0. bb := (p at: b+1) + z0. "result will cover the range [-1,1]" ^ self lerp: w a: (self lerp: v a: (self lerp: u a: (self grad: (p at: aa) x: x y: y z: z) b: (self grad: (p at: ba) x: x-1 y: y z: z) ) b: (self lerp: u a: (self grad: (p at: ab) x: x y: y-1 z: z) b: (self grad: (p at: bb) x: x-1 y: y-1 z: z) ) ) b: (self lerp: v a: (self lerp: u a: (self grad: (p at: aa+1) x: x y: y z: z-1) b: (self grad: (p at: ba+1) x: x-1 y: y z: z-1) ) b: (self lerp: u a: (self grad: (p at: ab+1) x: x y: y-1 z: z-1) b: (self grad: (p at: bb+1) x: x-1 y: y-1 z: z-1) ) )121beflatCollect: aBlock "Evaluate aBlock for each of the receiver's elements and answer the list of all resulting values flatten one level. Assumes that aBlock returns some kind of collection for each element. optimized version for Sequencable Collection and subclasses implementing #writeStream" "(#( (2 -3) (4 -5) #(-6)) flatCollect: [ :e | e abs ]) >>> #(2 3 4 5 6)" "(#( (2 -3) #((4 -5)) #(-6)) flatCollect: [ :e | e abs ]) >>> #(2 3 #(4 5) 6)" self isEmpty ifTrue: [ ^ self copy ]. ^self species new: 0 streamContents: [ :stream | self do: [ :each | stream nextPutAll: (aBlock value: each) ] ]]select: selectBock thenDo: aBlock "Refer to the comment in Collection>>#select:thenDo:" "(Array streamContents: [:stream | #(1 2 3 4) select: [:each | each > 2 ] thenDo: [:each | stream nextPut: each + 10]]) >>> #(13 14)" | each | 1 to: self size do: [ :index | (selectBock value: (each := self at: index)) ifTrue: [ aBlock value: each ]]$(Color red asHexString) >>> 'FF0000'1713010/0000CCC08888888888888889888888888888A8888880IIIT(true ifTrue: [ 'That is true!' ] ifFalse: [ 'That is false!' ]) >>> 'That is true!'cmonth "(Date year: 2018 month: 9 day: 28) month printString >>> 'September 2018'" ^ self asMonth1J(true ifTrue: [ 'This statement is true!' ]) >>> 'This statement is true!'132 nil := nil1dAssuming the receiver contains GZIP compressed data, return a ByteArray with the decompressed data..00######"""##"""#########"""###"""##"""###"""0300310B([#() emptyCheck] on: CollectionIsEmpty do: [ 'oops' ]) >>> 'oops'1"'foo10foo' endsWithDigit >>> false73foo*baz111111100000000022222222222221.0101228309closeTo: aSequenceableCollection "Return true if all my elements are close to the elements of same index of the parameter" "(#(1.9283901234902349 2.302949083493849) closeTo: #(1.9283901234902348 2.302949083493899)) >>> true" ^ self closeTo: aSequenceableCollection precision: Float defaultComparisonPrecision1a{ 1 + 21016rDFpharo!15b|Answer whether aPoint is within the receiver. Pay attention the self origin is considered less than but the corner is strict102c210h60zInclude newObject as one of the receiver's elements. Answer newObject. ArrayedCollections cannot respond to this message.1640first: n "Answer the first n elements of the receiver. Raise an error if there are not enough elements." "(#(a b c d e f g h ) first: 3) >>> #(a b c)" ^ self copyFrom: 1 to: n4100.1-(#(10 20) ifNotEmpty: [:x| x average]) >>> 152410100variable expected in assigmentad-3f3.14794(#(w x y z) atPin: 8) >>> #z11 Five is {1}.pharo100hello(Character pageUp isControlOther >>> true/Answer a set with the elements of the receiver.EPut anObject at every index specified by the elements of aCollection..Tests-unix-64-System-Installers-Tests-Test.xml301002*baz*b+Tests-unix-64-NewTools-FontChooser-Test.xml1x4u XXXX1011SNote: By convention, brightness is abbreviated 'v' to to avoid confusion with blue.AReturn the class of STON maps, Dictionary, a system wide constant-42XXXXXXX$((1/3)@(2/2)) isFloatPoint >>> false12cbe403:Answer whether anObject is one of the receiver's elements..(#(1 2 2 3 1 1 1) asBag includes: 5) >>> falseb0vector0"0 :BBBBBBBBBBB | bbbbbbbbbbb s n 0.In {1} you can escape { by prefixing it with \7.53 23a-2 odd >>> falsexye2550.5x1110k Xuuuuu test test a$(200@200 scaleBy: 2@3) >>> (400@600)12 ** -1 >>> (1/2)gAnswer true whether the receiver is inside the argument (following Rectangle>>#containsPoint: semantics0vector01B(Character space join: #('Pharo' 'is' 'cool')) >>> 'Pharo is cool'te32bad stop index ppp < < X h1&Tests-unix-64-Ring-Core-Tests-Test.xml0-(Date today equals: Date yesterday) >>> falsed310319233200 [ | b | ]05110101013! A shortcut method for raisedTo: 100020120pppp A pppp A ^ a0vector04001133mozo7140010Returns a string representation of the receiver as hex, prefixed with 16r. DO NOT CHANGE THIS! The Cog VMMaker depends on this. Hello, world!2106 slowFactorial >>> 720e00{ #foo : 1 , #bar : 2 }400011.06421hAnswer the upper left corner of the rectangle uniquely defined by the receiver and the argument, aPoint.110indexOfSubCollection: aSubCollection startingAt: anIndex "Answer the index of the receiver's first element, such that that element equals the first element of aSubCollection, and the next elements equal the rest of the elements of aSubCollection. Begin the search at element anIndex of the receiver. If no such match is found, answer 0." "(#(a b c d e) indexOfSubCollection: #(c d) startingAt: 2) >>> 3" "(#(a b c d e) indexOfSubCollection: #(c d) startingAt: 4) >>> 0" ^self indexOfSubCollection: aSubCollection startingAt: anIndex ifAbsent: [0]10022552-1PConverts a method selector into a test selector in form of #testOriginalSelectorXXXXXX01'('ab ab ac de' howManyMatch: 'a') >>> 1154a1: a1 a2: a2 a3: a3 a4: a4 a5: a5 a6: a6 a7: a7 a8: a8 a9: a9 a10: a10 a11: a11 a12: a12 a13: a13 a14: a14 a15: a15 a16: a16 ^ a123Point[1,/*comment*/2]?Answer true if the receiver starts with the argument collection12a :foomin "Return the minimum value of the collection" "#(1 5 10 -4) min >>> -4" "{1@5. 10@ -4} min >>> (1@ -4)" ^ self inject: self anyOne into: [:min :each | min min: each]22'('''''' unescapeCharacter: $') >>> ''''one220(nil ifNil: [42] ifNotNil: [:o | o +3 ] ) >>> 42c1030$A printStringHex >>> '41'3Rwith: anObject withAll: aCollection "Creates an array with anObject followed by elements contained in aCollection." "(Array with: 1 withAll: #(2 3 4)) >>> #(1 2 3 4)" | newArray | newArray := self new: aCollection size + 1. newArray at: 1 put: anObject. newArray replaceFrom: 2 to: newArray size with: aCollection. ^newArray0(-0.98 printShowingDecimalPlaces: 2) >>> '-0.98'00000111103355554446101000:B|||b03033D('pharo' beginsWith: 'pharo-project' caseSensitive: false) >>> falseSgrowAtFirst "Add new empty slots to the front of array, while keeping the empty slots at the end." "OrderedCollection new capacity >>> 10" "(OrderedCollection new growAtFirst; capacity) >>> 20" | newArray newFirstIndex newLastIndex | newArray := self class arrayType new: (array size * 2 max: 1). newFirstIndex := newArray size - array size + firstIndex. newLastIndex := newFirstIndex + lastIndex - firstIndex. newArray replaceFrom: newFirstIndex to: newLastIndex with: array startingAt: firstIndex. array := newArray. firstIndex := newFirstIndex. lastIndex := newLastIndex30first3200hu u. X 0 :B 0. X X;(Date year: 2018 month: 9 day: 28) mmddyyyy >>> '9/28/2018'5xa50%Answer the factorial of the receiver.unzipped "Assuming the receiver contains GZIP compressed data, return a ByteArray with the decompressed data." "#[31 139 8 0 0 0 0 0 0 0 99 100 98 6 0 29 128 188 85 3 0 0 0] unzipped >>> #[1 2 3]" ^ (GZipReadStream on: self) upToEnd/(23.4567 printShowingDecimalPlaces: 0) >>> '23'1001This statement is false!,foo "a" "b" "c" "d" "e" "f" "g" 31030 ab ab ac de4.0112222220000111111 one:1;two:2;z-6%1 minute printString >>> '0:00:01:00' Answer a number that represents the number of complete minutes in the receiver' time part, after the number of complete hours has been removed.{} isEmpty >>> true42U({10. 20} asOrderedCollection add: 20; yourself) >>> {10. 20. 20} asOrderedCollectioni (String streamContents: [:s | #('hello' 'the' 'world') do: [:each | s << each]]) >>> 'hellotheworld'C('bar' asSortedCollection: [:x :y| x>y ]) asArray >>> {$r. $b. $a}.210cOReturn a string representing the receiver in HEX (i.e., 6 elements in 16 basis)020sixth "Answer the sixth element of the receiver. Raise an error if there are not enough elements." "#(a b c d e f g h i) sixth >>> #f" ^ self at: 6dIf I am involved in arithmetic with another Collection, return a Collection of the results of each element combined with the scalar in that expression. Is used to implement Collection>>+, Collection>>-, etc.0XXs>({ 2@6 . -4@3 . 10@ -3 } detectMax: [ :p | p x ]) >>> (10@ -3)6'2 between: 0 and: 4' findSelector >>> #'between:and:'2}>>> anObject "Return a pair. It is handy to support the tweaking of pharo doc expression. A pharo doc expression is a comment as the following one:" "4 + 3 >>> 7" "Pay attention when you write an executable comment for keyword-based method: surround with parentheses your expression because, otherwise the executable comment won't work as the message is binary." "(1 max: 1000) >>> 1000" "An executable comment must be in its own comment block (enclosed in double quotes) and can be multi-line for better readability. Code editor hint: you can double click on the inner side of a double quote to select the whole comment block, then Cmd+I to evaluate and inspect the whole executable comment." "Note: to be syntactically valid as an executable comment, there should be exactly one single triple > message send, and it should be the last statement." "| rectangles | rectangles := OrderedCollection new add: (Rectangle left: 5 right: 10 top: 0 bottom: 15); add: (Rectangle left: 0 right: 15 top: 5 bottom: 10); yourself. (Rectangle merging: rectangles) >>> (Rectangle left: 0 right: 15 top: 0 bottom: 15)" ^ self -> anObject1XX XX n XX# n X10H#(2 4 6 8) , #(who do we appreciate) >>> #(2 4 6 8 who do we appreciate)Z(#(1 2 3 3 4 1 2 3 5 4 6) splitOn: 4) >>> #(#(1 2 3 3) #(1 2 3 5) #(6))asOrderedCollection021NcopyReplaceTokens: oldSubstring with: newSubstring "Replace all occurrences of oldSubstring that are surrounded by non-alphanumeric characters" "('File asFile Files File''s File' copyReplaceTokens: 'File' with: 'Snick') >>> 'Snick asFile Files Snick''s Snick'" ^ self copyReplaceAll: oldSubstring with: newSubstring asTokens: trueReturns a new string with contents equals to aString surrounded by aCharacter. Escapes all occurrences of aCharacter within aString by doubling them. hello world!4add: newObject before: oldObject "Add the argument, newObject, as an element of the receiver. Put it in the sequence just preceding oldObject. Answer newObject." "(OrderedCollection new add: 42; add: 41 before: 42; yourself) asArray >>> #(41 42)" ^ self insert: newObject before: (self find: oldObject)ds$(#[1 2 0 4] booleanAt: 3) >>> false.b}Collect and return the result of evaluating twoArgBlock with corresponding elements from this collection and otherCollection.0407((1 == 1) eqv: true) >>> true1 between: 0MockPackage-testsanoneSatisfy: aBlock "Evaluate aBlock with the elements of the receiver. If aBlock returns false for all elements return true. Otherwise return false" "(#(2 4 6) noneSatisfy: [:x|x odd]) >>> true" "(#(1 2 3) noneSatisfy: [:x|x odd]) >>> false" "('hello!' noneSatisfy: #isUppercase) >>> true" "('hello!' noneSatisfy: #isLetter) >>> false" "(#() noneSatisfy: ['oops']) >>> true" self do: [:item | (aBlock value: item) ifTrue: [^ false]]. ^ true1aBc2010101933{1@5. 10@ -4} min >>> (1@ -4)(1)2asIdentitySet "Return a new IdentitySet based on self." "{ 2. 1+1 } asIdentitySet size >>> 1" "{ 'foo'. ('fo','o') } asIdentitySet size >>> 2" ^(IdentitySet new: self size) addAll: self; yourselfwho400100#(10 20 30) sum >>> 60203-8203.150'""" 0 """ | """ T """ T """ | """ 0 """pReturn a String representation of this number in base b with a minimum length and padded by 0 if zeroFlag is seta1=Answer whether the final character of the receiver is a colon9110 Xs X2isNotEmpty "Answer whether the receiver contains any elements." "#() isNotEmpty >>> false" "#(()) isNotEmpty >>> true" "'' isNotEmpty >>> false" "' ' isNotEmpty >>> true" ^ self isEmpty not/0777000000888030999000000III0A0JJJ0CCGGGCD0HHH030100-1:(#(a b c d e) indexOf: #c startingAt: 4 ifAbsent: 7) >>> 7302c14^ 5E(1 milliSecond + 1 nanoSecond) printString >>> '0:00:00:00.001000001'111RExecute the receiver with the correct number of arguments taken from the argument.range "returns the difference between the max and min element, their positions notwithstanding" "#( 1 51 10 ) range >>> 50" "{1@50. 10@ -10. 5@5} range >>> (9@60)" ^ self max - self minNot valid for negative integers00000105333344226672cd12 hex >>> '16rC'000111213333141100151.(#(40 41 42) asOrderedCollection at: 2) >>> 4122 #(aa:bb:cc#aa:bb:cc#cc==#== =#=)2042hAA1| | . :aabddf6-0.53001121113004index out of range400103 (#(a b c d e) indexOf: #x) >>> 030Evaluate aBlock with each of the receiver's elements as the argument. Collect the resulting values into an instance of aClass. Answer the resulting collection.bat: index ifAbsent: exceptionBlock "Answer the element at my position index. If I do not contain an element at index, answer the result of evaluating the argument, exceptionBlock." "(#(a b c d) at: 3 ifAbsent: #z) >>> #c" "(#(a b c d) at: 5 ifAbsent: #z) >>> #z" (index between: 1 and: self size) ifTrue: [^ self at: index]. ^ exceptionBlock value!((2@2) * (100@200)) >>> (200@400)21003 1 foo; . 2abc17131 nnnnnnnuu 0:00:01:00reversed "Answer a copy of the receiver with element order reversed. " "#(2 3 4 'fred') asOrderedCollection reversed >>> #('fred' 4 3 2) asOrderedCollection" | newCol | newCol := self speciesForTransform new: self size. self reverseDo: [ :elem | newCol addLast: elem ]. ^ newCol100001021X /Answer how many elements the receiver contains.01!(#() averageIfEmpty: [ 0 ]) >>> 0O( #(1 2 3) flatCollectAsSet: [:each | { each. each+1 } ] ) >>> #(1 2 3 4) asSet1. Test package ends with suffix -Tests. Suffix is case sensitive. 2. Or test package contains '-Tests-' in middle. Some examples: 0vector01410| | . 1(1923 roundDownTo: 10) >>> 192011c1!(-1929 truncateTo: 10) >>> -1920(printOn: aStream base: base length: minimum padded: zeroFlag "Return a String representation of this number in base b with a minimum length and padded by 0 if zeroFlag is set" "(String streamContents: [ :s | 10 printOn: s base: 10 length: 4 padded: true] ) >>> '0010'" "(String streamContents: [ :s | -10 printOn: s base: 10 length: 4 padded: true] ) >>> '-010'" | prefix | prefix := self negative ifTrue: ['-'] ifFalse: [ '' ]. self print: (self abs printStringBase: base) on: aStream prefix: prefix length: minimum padded: zeroFlag2112 2018-09-28hMissing opener for closer: ]\\ arg "Pairwise integer modulo of two sequenceable collections of the same length." "#(10 20 30) \\ #(1 3 4.0) >>> #(0 2 2.0)" "{10@20. 30@0} \\ {1@3. 4.0@1} >>> {(0@2). (2.0@0)}" ^ arg adaptToCollection: self andSend: #\\1Durstenfeld's version of the Fisher-Yates shufflePreduce: aBlock "Fold the result of the receiver into aBlock. The argument aBlock must take two or more arguments. It applies the argument, binaryBlock cumulatively to the elements of the receiver. For sequenceable collections the elements will be used in order, for unordered collections the order is unspecified." "(#(1 2 3) reduce: [ :a :b | a + b ]) >>> 6" "1 + 2 + 3" "(#(1 2 3) reduce: [ :a :b | a + b ]) >>> (1 + 2 + 3)" "(#(1 2 3 4 5) reduce: [ :a :b :c | a + b + c ]) >>> 15" "(#(1 2 3 4 5) reduce: [ :a :b :c | a + b + c ]) >>> (1 + 2 + 3 + 4 + 5)" ^ self reduceLeft: aBlock ((100@200) < (330@400)) >>> true21120}onPreviousMonth "(Date year: 2018 month: 9 day: 28) onPreviousMonth printString >>> '28 August 2018'" ^ self addMonths: -11 'h' 562s:1 e:5 s:7 e:8 s:10 e:13 d+Tests-unix-64-System-Support-Tests-Test.xmlS ([#() anyOne] on: SubscriptOutOfBounds do: [ :ex | 'whatever' ]) >>> 'whatever' 00######################### ###02100 :B | X b X X\(Array new: 3 streamContents: [ :out | 3 timesRepeat: [ out nextPut: 42 ] ]) >>> #(42 42 42) #( #[ 0 1 2 )23:({1. 2. 3. 4} replace: [:each | each + 1 ]) >>> #(2 3 4 5) 2r-00101000!(2 ifNotNil: [ :o | o + 3]) >>> 5a_select elements from the receiver that the block evaluates true with the element and its index.5Optimized version of Collection>>#collect:thenSelect:last "Answer the last element of the receiver. Pay attention, last is not equivalent to stop in certain situations. See below." "(1 to: 10 by: 2) last >>> 9" "(0 to: 10 by: 2) last >>> 10" ^stop - (stop - start \\ step)Answer the y coordinate.-(23 printShowingDecimalPlaces: 2) >>> '23.00'1030fEvaluate aBlock with the elements of the receiver. If aBlock returns false for all elements return true. Otherwise return false12(#(1 5 10) findFirst: [ :each | each > 15 ]) >>> 0 #(a b c d e f g h ) first >>> #a20vector0427200({3. 9. 1} sort: [:a :b | a <= b ]) >>> #(1 3 9);12(Array streamContents: [:stream | #(10 20) paddedWith: #(40 50 60) do: [:a :b | stream nextPut: {a. b} ]]) >>> #(#(10 40) #(20 50) #(nil 60))2basenameWithoutExtension: anExtension "Returns the basename without specified extension (if any) " "('/foo/gloops.taz' asPath basenameWithoutExtension: 'taz') >>> 'gloops'" | extensionWithDelimiter | extensionWithDelimiter := anExtension copyWithFirst: self extensionDelimiter. ^ (self basename endsWith: extensionWithDelimiter) ifTrue: [ self basename allButLast: extensionWithDelimiter size ] ifFalse: [ self basename ]43isOctetString "Answer whether the receiver can be represented as a byte string. This is different from asking whether the receiver *is* a ByteString (i.e., #isByteString)" "'abc' isOctetString >>> true" ^ truefoo < 8:a#( #( 0 1r2 3 ) )17({#a. #b. #c. #d. #e} swap: 5 with: 1) >>> #(e b c d a)100 XX n XX n Xadd: newObject "Include newObject as one of the receiver's elements. Answer newObject. ArrayedCollections cannot respond to this message." "({10. 20} asOrderedCollection add: 30) >>> 30" "({10. 20} asOrderedCollection add: 30; yourself) >>> {10. 20. 30} asOrderedCollection" "({10. 20} asOrderedCollection add: 20; yourself) >>> {10. 20. 20} asOrderedCollection" "({10. 20} asSet add: 30; yourself) >>> {10. 20. 30} asSet" "({10. 20} asSet add: 20; yourself) >>> {10. 20} asSet" self subclassResponsibility*(#(1 2 3 4 5) reject: #even) >>> #(1 3 5)2330.56V('Hello, world!' collect: [:e | e isLetter ifTrue: e ifFalse: $-]) >>> 'Hello--world-'109({10. 20} asSet add: 30; yourself) >>> {10. 20. 30} asSet10max "Return the maximum value of the collection" "#(1 5 10 -4) max >>> 10" "{1@5. 10@ -4} max >>> (10@5)" ^ self inject: self anyOne into: [ :max :each | max max: each ](10.12345 round: 2) >>> 10.12 1.04 TestFailure Assertion failed SocketStreamTest(TestAsserter)>>assert:description:resumable: SocketStreamTest(TestAsserter)>>assert:description: SocketStreamTest(Object)>>assert: SocketStreamTest(TestAsserter)>>should:raise: SocketStreamTest>>testFlushLargeMessageOtherEndClosed SocketStreamTest(TestCase)>>performTest 4U(ByteArray with: 97 with: 0 with: 0 with: 0) asString ~= 'a000' asWideString >>> true3z"foo: thisContext ^ thisContext + 1115!""" 0 """ n """ """ n """ 0 """240Perform a time zone independent comparison of the dates, i.e. only compare day, month and year. To compare with time zones, use #=9(STON fromString: '[1 , 2 , 3]') class >>> STON listClassQAnswer a new collection with newElement added (as last element if sequenceable).>Return number that represents digit at given decimal position.1e2IMPLEMENTATION NOTE: following algorithm is optimized in primitive only in case self and prefix are bytes like. Otherwise, if self is wide, then super outperforms, Otherwise, if prefix is wide, primitive is not correct zipped "Return a ByteArray containing a GZIP compressed version of the receiver" "#[ 1 2 3 ] zipped >>> #[31 139 8 0 0 0 0 0 0 0 99 100 98 6 0 29 128 188 85 3 0 0 0]" ^ ByteArray streamContents: [ :out | (GZipWriteStream on: out) nextPutAll: self; close ]DNonevaluating disjunction -- answer true since the receiver is true. |||| a 9 % -4 >>> -3-2 even >>> true1#(a b c) asOrderedCollection asArray >>> #(a b c)4,(Set newFrom: {1. 2. 3}) >>> #( 1 2 3) asSet7The Rolling Stonesgreen "Return the green component of this color, a float in the range [0.0..1.0]." "Color red green >>> 0.0" "(Color r: 0.5 g: 0.5 b: 1) green >>> 0.5004887585532747" ^ self privateGreen asFloat / ComponentMaxnegated "Negated value of all elements in the collection" "#(1 2 3) negated >>> #(-1 -2 -3)" "{1@2. 3@ -1} negated >>> {-1@ -2. -3@1}" ^ self collect: [ :a | a negated ]-48Trim separators from both sides of the receiving string.1220008!000001033555655585544444444AA999B4 0000111110d8reduce: aBlock "Fold the result of the receiver into aBlock. The argument aBlock must take two or more arguments. It applies the argument, binaryBlock cumulatively to the elements of the receiver. For sequenceable collections the elements will be used in order, for unordered collections the order is unspecified." "( #(1 2 3) asSet reduce: [ :a :b | a + b ] ) >>> (1 + 2 + 3)" "( #(1 2 3 4 5) asSet reduce: [ :a :b :c | a + b + c ] ) >>> (1 + 2 + 3 + 4 + 5)" "Maybe look at the related method Collection>>inject:into:" ^self asOrderedCollection reduce: aBlock0'''h''' withoutQuoting >>> 'h'{1)2}-3V( #('string1' #('string2' 'string3')) flattened ) >>> #('string1' 'string2' 'string3')#$} isConnectorPunctuation >>> false19305 u nn. ^ u;310(true and: [true]) >>> true211, 2, 3 -5136457242canySatisfy: aBlock "Evaluate aBlock with the elements of the receiver. If aBlock returns true for any element return true. Otherwise return false." "(#(1 3) anySatisfy: [ :each | each even ]) >>> false" "(#(1 2) anySatisfy: [ :each | each even ]) >>> true" "('hello world!' anySatisfy: [ :each | each isLetter ]) >>> true" "('hello world!' anySatisfy: [ :each | each isDigit ]) >>> false" "((4 to: 9) anySatisfy: #isPrime) >>> true" "((4 to: 50 by: 2) anySatisfy: #isPrime) >>> false" "(#() anySatisfy: [ true ]) >>> false" self do: [ :each | (aBlock value: each) ifTrue: [ ^ true ] ]. ^ false#( # ## #ab # 10 # #'.' 10 )/(nil ifNotNil: [:o | o +3 ] ifNil: [42]) >>> 421128(42 decimalDigitAt: 1) >>> 2>Tests-unix-64-Calypso-SystemPlugins-FFI-Queries-Tests-Test.xml4}Search for an element in the receiver using binary search. The argument aBlock is a one-element block returning 0 - if the element is the one searched for <0 - if the search should continue in the first half >0 - if the search should continue in the second half If no matching element is found, evaluate exceptionBlock, with the 'bounding' elements as optional arguments.7Returns a color instance from HEX (6 element elements).;({#x .#y .#z} atAll: #(1 3) put: #e; yourself) >>> #(e y e)15Answer a Rectangle whose origin is the receiver and whose corner is aPoint. This is one of the infix ways of expressing the creation of a rectangle. 0:00:00:02.('word before index' wordBefore: 4) >>> 'word'-5 salkjsdlkgfee10_findFirstInByteString: aByteString startingAt: start "Find the index of first character starting at start in aByteString that is included in the receiver. Default is to use a naive algorithm. Subclasses might want to implement a more efficient scheme. Return 0 if not found." "('aeiou' findFirstInByteString: 'hello world' startingAt: 1) >>> 2." "('aeiou' findFirstInByteString: 'hello world' startingAt: 3) >>> 5." "('aeiou' findFirstInByteString: 'hello world' startingAt: 9) >>> 0." start to: aByteString size do: [:index | (self includes: (aByteString at: index)) ifTrue: [^ index]]. ^ 0-100.202a := a. [ :a [ :a ]. a := a11 [ 1 ]. [ 2 ]21300460077900AEEECFirst N characterspwn0 Return a new interval representing the open version of the receiver. In other words, the new inteval does not contain the upper and lower boundaries of the receiver mReturn true if the receiver is sorted by the given criterion. Optimization for isSortedBy: [:a :b | a <= b].2 between: ( 1 and: 4)lastIndexOfAnyOf: aCollection startingAt: lastIndex ifAbsent: exceptionBlock "Answer the index of the last occurrence of anElement within the receiver. If the receiver does not contain anElement, answer the result of evaluating the argument, exceptionBlock." "(#(a b a d a) lastIndexOfAnyOf: #(a b) startingAt: 1 ifAbsent: 7) >>> 1" lastIndex to: 1 by: -1 do: [:index | (aCollection includes: (self at: index)) ifTrue: [^ index]]. ^ exceptionBlock valueDo a character-by-character comparison between the receiver and aString. Return the index of the final character that matched exactly.(Character space isControlOther >>> false2.0b22u u. X X . X X1Point instanceSide >>> Point ###'hello'''' asLowercase >>> ''g-3.140#Tests-unix-64-Random-Tests-Test.xml020'|' or parameter expectedNumber1410ZThe following example creates an association whose key is number 1 and value string 'one'.abc1al81122word6one1wAnswer a copy of the receiver containing all but the last n elements. Raise an error if there are not enough elements.hello0vector240123(#(1 2) anySatisfy: [ :each | each even ]) >>> true02B#(1 2 3) asOrderedCollection removeDuplicates asArray >>> #(1 2 3)400do16101.05Returns the boolean the byte at index byteOffset of this ByteArray represents in the C convention ( A byte representing the 0 integer corresponds to false, while all other integers corresponds to true).abcdefghwhatever ,highBit is not defined for negative integersXAnswer the result of evaluating aBlock with all of the overlapping pairs of my elements.210pharo,'th is is29 a stRI4' squeezeOutNumber >>> 29A(#(#do #la #si #do #la) copyWithoutDuplicates) >>> #(#la #do #si)with: otherCollection collect: twoArgBlock "Collect and return the result of evaluating twoArgBlock with corresponding elements from this collection and otherCollection." "(#(1 2 3) with: #(4 5 6) collect: [:a :b | a + b]) >>> #(5 7 9)" | result | otherCollection size = self size ifFalse: [self errorSizeMismatch]. result := self species new: self size. 1 to: self size do: [:index | result at: index put: (twoArgBlock value: (self at: index) value: (otherCollection at: index))]. ^ resultppp < <<<<>> 0107(Character space isAlphaNumeric >>> false . #hello2r9Answers a Dictionary based on collection of Associations.*Tests-unix-64-Roassal-Chart-Tests-Test.xmlppppXpppaCAnswer the name of the day of the week on which the receiver falls.108Tests-unix-64-NewTools-Spotter-Processors-Tests-Test.xml | | . - 1split: aSequenceableCollection indicesDo: aBlock "Perform an action specified as aBlock (with a start and end argument) to each of the indices of the receiver element that have been identified by splitting the receiver using the splitter argument. optimized version for single delimiters." "(String streamContents: [:s | Character space split: 'Pharo is cool' indicesDo: [ :start :end | s << 's:' << start asString << ' ' << 'e:' << end asString << ' ' ]]) >>> 's:1 e:5 s:7 e:8 s:10 e:13 '" | position oldPosition | position := 1. oldPosition := position. position := aSequenceableCollection indexOf: self startingAt: position. [ position > 0 ] whileTrue: [ aBlock value: oldPosition value: position - 1. position := position + 1. oldPosition := position. position := aSequenceableCollection indexOf: self startingAt: position. ]. aBlock value: oldPosition value: aSequenceableCollection size3400$(nil ifNotNil: [:o | o +3 ]) >>> nil#'hello000223001000_Evaluating disjunction (OR) -- answer with the argument, aBoolean, since the receiver is false.2instanceSide "Return the class of the couple class/metaclass. Useful to avoid explicit test." "Point instanceSide >>> Point" "Point class instanceSide >>> Point" ^ self subclassResponsibility12a7h(String streamContents: [:s| 'abcd' asStringOn: s delimiter: ', ' last: ' and ']) >>> 'a, b, c and d'asArray "Answer an Array whose elements are the elements of the receiver. Implementation note: Cannot use ''Array withAll: self'' as that only works for SequenceableCollections which support the replacement primitive." "'ab' asArray >>> {$a. $b}" "(1 to: 5 by: 3) asArray >>> {1. 4}" "#(1 2) asArray == #(1 2) >>> true" "'' asArray >>> #()" "(10 to: 5) asArray >>> #()" | newArray index | newArray := Array new: self size. index := 0. self do: [ :each | newArray at: (index := index + 1) put: each ]. ^ newArray12abc11f0.410010`({10. 20} asOrderedCollection addIfNotPresent: 20; yourself) >>> ({10. 20.} asOrderedCollection)69 a, b and c211ac201pppp A pp A pp A X | t t t | t s t s t-0.982replace: aBlock "Evaluate aBlock with each of the receiver's elements as the argument. Collect the resulting values into self." "({1. 2. 3. 4} replace: [:each | each + 1 ]) >>> #(2 3 4 5)" 1 to: self size do: [ :index | self at: index put: (aBlock value: (self at: index)) ]10de0zmin "Answer a number that is the minimum of the x and y of the receiver." "(100@200) min >>> 100" ^ self x min: self y0Tests-unix-64-Refactoring-Changes-Tests-Test.xml true := true0000222222266655510100330a := a. [ :a | [ :a | a := a1sEAnswer an instance of me containing the same elements as aCollection.2$h$w2r00101000 highBit >>> 6after: target ifAbsent: exceptionBlock "Answer the element after target. Answer the result of evaluation the exceptionBlock if target is not in the receiver, or if there are no elements after it." "(#(a b c d) after: #b ifAbsent: #z) >>> #c" "(#(a b c d) after: #x ifAbsent: #z) >>> #z" | index | index := self indexOf: target. ^ (index = 0 or: [index = self size]) ifTrue: [exceptionBlock value] ifFalse: [self at: index + 1]10 'def' > 'def' >>> false/Tests-unix-64-NewTools-Inspector-Tests-Test.xml10022nhue "Return the hue of this color, an angle in the range [0.0..360.0]." "Color red hue >>> 0.0" "(Color r: 0.5 g: 0.5 b: 1) hue >>> 240.0" | r g b max min span h | r := self privateRed. g := self privateGreen. b := self privateBlue. max := (r max: g) max: b. min := (r min: g) min: b. span := (max - min) asFloat. span = 0.0 ifTrue: [ ^ 0.0 ]. h := r = max ifTrue: [ (g - b) asFloat / span * 60.0 ] ifFalse: [ g = max ifTrue: [ 120.0 + ((b - r) asFloat / span * 60.0) ] ifFalse: [ 240.0 + ((r - g) asFloat / span * 60.0) ] ]. h < 0.0 ifTrue: [ h := 360.0 + h ]. ^ h | a | | aa4200-8 goodby: 2 my: 3+ arg "Answer a Point that is the sum of the receiver and arg." "((2@2) + (100@200)) >>> (102@202)" "((2@2) + 200) >>> (202@202)" arg isPoint ifTrue: [^ (x + arg x) @ (y + arg y)]. ^ arg adaptToPoint: self andSend: #+2^Answer whether the receiver is a valid token-character -- letter, digit, underscore, or colon.0(gggggggggggggggggg sssssss '''''''''''''(Color hex: 0.2) >>> '33'#(10 20 30) sum >>> 600131d10zRound the decimal part of the receiver to be limited to the number of wished decimal. Only leave a fixed amount of decimal1den uuuuuuu Xuu Object := Objectabce16310-Tests-unix-64-VariablesLibrary-Tests-Test.xml20vector01// arg "Pairwise integer quotient of two sequenceable collections of the same length." "#(10 20 30) // #(1 3 4.0) >>> #(10 6 7)" "{10@20. 30@0} // {1@3. 4.0@1} >>> {(10@6). (7@0)}" ^ arg adaptToCollection: self andSend: #//032(({#x .#y. #z} atAllPut: #a) >>> #(a a a)false asBit >>> 013Class structural inspection - Class/Metaclass shift1 + ,ppp | T | t n. ^ 0 :B | b 0 ssssss nn s tThe factorial on n is defined as: n * (n-1)*(n-2)*... while n>0. Factorial of 0 is 1. We also know Factorial of 1 and 2 are themselves. This implementation uses a 2-partition algorithm. For a recursive (but slower) implementation see 'slowFactorial' Without verbose detail: If'm an even number,some optimization can be applied: Instead of doing all multiplication we can halving the number of multiplication regrouping terms, so: n*(n-1)*(n-2)*....*3*2*1 can be rearranged as: (n*1)*((n-1)*2)*((n-2)*3)*... And the use the fact n is even to rewrite in a more efficient way. If I'm an odd number then compute for n-1 and multily by n. P(String streamContents: [ :out | STON put: 1@2 onStream: out ]) >>> 'Point[1,2]'WWWWW60book-result|W01-Welcome251e foo||bar||211 This should be fast: 1. Integer>>to:do: is inlined in the bytecode (no block). 2. The Array>>at: callsite should be monomorph to a primitive method. &(#() intersection: #(1 2 3 4)) >>> #()'A' asByteArray >>> #[65]40"fear is the little death that the.0.14-3whateverThat is false!3abcDefgh34expandMacros "'' expandMacros >>> String tab" "'' expandMacros >>> String cr" "'' expandMacros >>> OSPlatform current lineEnding" ^self expandMacrosWithArguments: #() a0 ; Add returns the object itselffoo:::a110x3 10000000040toString: object "Return a String with the STON serialization of object" "(STON toString: 1@2) >>> 'Point[1,2]'" ^ String streamContents: [ :stream | self put: object onStream: stream ]3-10 hex >>> '-16rA'202 1 hello: 30e1b3310.0a311112004444466676655B9999A5y1 [ | | . 10222333:. :. :a(false and: [true]) >>> false118combinations "Return all the combinations of elements of the receiver. Note that combinations does not include the empty element contrary to the mathematical definition of combinations." "#(1 2 3 4) combinations >>> #(#(1) #(2) #(3) #(4) #(1 2) #(1 3) #(1 4) #(2 3) #(2 4) #(3 4) #(1 2 3) #(1 2 4) #(1 3 4) #(2 3 4) #(1 2 3 4))" ^ Array streamContents: [ :stream | 1 to: self size do: [ :take | self combinations: take atATimeDo: [ :combination | stream nextPut: combination copy ] ] ]10vector01(#(3 9 1) sorted: [:a :b | a <= b ]) >>> #(1 3 9)3cand: alternativeBlock "Nonevaluating conjunction. If the receiver is true, answer the value of the argument, alternativeBlock; otherwise answer false without evaluating the argument." "(true and: [true]) >>> true" "(true and: [false]) >>> false" "(false and: [true]) >>> false" "(false and: [Error signal]) >>> false" self subclassResponsibility6Remove the copies of elements, but keep the same orderYmakeRoomAtFirst "Make some empty slots at the front of the array. If we have more than 50% free space, then just move the elements, so that the first 50% of the slots are free, otherwise add new free slots to the front by growing. Precondition: firstIndex = 1" "#(1 2 3) asOrderedCollection capacity >>> 3" "#(1 2 3) asOrderedCollection makeRoomAtFirst capacity >>> 6" | tally newFirstIndex newLastIndex | tally := self size. tally * 2 >= array size ifTrue: [ ^self growAtFirst ]. tally = 0 ifTrue: [ ^self resetTo: array size + 1 ]. newFirstIndex := array size // 2 + 1. newLastIndex := newFirstIndex - firstIndex + lastIndex. 0 to: tally - 1 do: [ :offset | array at: newLastIndex - offset put: (array at: lastIndex - offset) ]. array from: firstIndex to: newFirstIndex - 1 put: nil. firstIndex := newFirstIndex. lastIndex := newLastIndex=Return the class of STON lists, Array, a system wide constant=(KeyboardKey named: 'SHIFT_L') >>> (KeyboardKey value: 65505)7'abc' \ 'cbe' >>> 'a'.xyThis is implemented using a variant of the normal inject:into: pattern that is specific to handling numbers. aBlock is expected to return a number for every element in the collection. Different from the sum: implementation, the default value is zero. While sum: is more general, sumNumbers: is meant to support the most often encountered use case of dealing with numbers.000 rx0vector2/Tests-unix-64-Collections-Native-Tests-Test.xml;#(1 2 3) asOrderedCollection makeRoomAtFirst capacity >>> 64010XXsX25uonNextMonth "(Date year: 2018 month: 9 day: 28) onNextMonth printString >>> '28 October 2018'" ^ self addMonths: 1WReturn a string containing the path elements of the receiver, without the 'Path *' part1-1.5 rounded >>> -21 + 2 }aeiou 36015 [ :a :b | four[ ]10112030^Append the elements of the argument, aSequenceableCollection, separating them by the receiver.1.25 reciprocal >>> 0.811"'78 92' initialIntegerOrNil >>> 7812r1011010vector06302280#(3 5 7 7) average >>> (11/2) ()a2324543containsPoint: aPoint "Answer whether aPoint is within the receiver. Pay attention the self origin is considered less than but the corner is strict" "((0@0 corner: 100@100) containsPoint: 50@50) >>> true" "((0@0 corner: 100@100) containsPoint: 0@0) >>> true" "((0@0 corner: 100@100) containsPoint: 100@50) >>> false" "((0@0 corner: 100@100) containsPoint: 100@100) >>> false" ^origin <= aPoint and: [aPoint < corner]2 [ | a b | 010010320hello((#(10 20 30) includesAny: #()) >>> falseNReturn the class of the couple class/metaclass. Useful to avoid explicit test.3 0:00:02:00iAnswer the lower right corner of the rectangle uniquely defined by the receiver and the argument, aPoint.NReturn the class of the couple class/metaclass. Useful to avoid explicit test.8cEMight be compiled inline for speed, see RBMessageNode>>#isInlineIfNil #( 1 #+ 2coolAnswer the index of the last occurrence of anElement within the receiver. If the receiver does not contain anElement, answer the result of evaluating the argument, exceptionBlock.D(#(2 3 4 4 5 6) copyWithoutDuplicates asSet) >>> #(2 3 4 5 6) asSet1'ab' asArray >>> {$a. $b}BoccurrencesOf: anObject "Answer how many of the receiver's elements are equal to anObject." "(#(10 20 10 30) occurrencesOf: 10) >>> 2" "('hello world' occurrencesOf: $l) >>> 3" "('hello world' occurrencesOf: 10) >>> 0" | tally | tally := 0. self do: [:each | anObject = each ifTrue: [tally := tally + 1]]. ^tally | a0 00020012300('LOL' detect: #isLowercase ifNone: [$X]) >>> $X{ ^ 1. 2. ^ 3 }and: alternativeBlock "Nonevaluating conjunction -- answer with false since the receiver is false." "(false and: [true]) >>> false" "(false and: [Error signal]) >>> false" ^selfyfindFirst: aBlock "Return the index of my first element for which aBlock evaluates as true. If no matching element is found, return 0" "(#(1 5 10) findFirst: [ :each | each > 3 ]) >>> 2" "(#(1 5 10) findFirst: [ :each | each > 15 ]) >>> 0" | index | index := 0. [(index := index + 1) <= self size] whileTrue: [(aBlock value: (self at: index)) ifTrue: [^index]]. ^ 0:20QfindBinary: aBlock ifNone: exceptionBlock "Search for an element in the receiver using binary search. The argument aBlock is a one-element block returning 0 - if the element is the one searched for <0 - if the search should continue in the first half >0 - if the search should continue in the second half If no matching element is found, evaluate exceptionBlock, with the 'bounding' elements as optional arguments." "(#(1 3 5 7 11 15 23) findBinary: [ :arg | 24 - arg ] ifNone: ['Not found']) >>> 'Not found'" "(#(1 3 5 7 11 15 23) findBinary: [ :arg | 24 - arg ] ifNone: [:a :b | 'over ', a printString]) >>> 'over 23'" "(#(1 3 5 7 11 15 23) findBinary: [ :arg | 25 - arg ] ifNone: [ :a :b | 'between: ',{a. b} printString ]) >>> 'between: #(23 nil)'" ^ self findBinary: aBlock do: [ :found | found ] ifNone: exceptionBlocknprintPathOn: aStream "Print the receiver's path on aStream (without 'Path' prepended) using the default delimiter" "(String streamContents: [ :str| ((FileSystem workingDirectory / 'book-result' / 'W01-Welcome') relativeToReference: FileSystem workingDirectory) printPathOn: str]) >>> 'book-result/W01-Welcome'" self printPathOn: aStream delimiter: self delimiter10ga3Class structural inspection - Class/Metaclass shiftu uu Split a collection of objects based on a splitter. splitter - can be a subsequence, a Block or a Regex (String receiver only). Any other object used as a splitter is treated as an Array containing that object.S(#(2r101 2r11 2r1000) inject: 0 into: [ :acc :each | acc bitXor: each ]) >>> 2r1110-98allPairsDo: aBinaryBlock "Iterate over all the pairs of the receiver and apply the binaryBlock to each pair. " "(Array streamContents: [ :stream | #(0 1 2 3) allPairsDo: [ :first :second | stream nextPut: { first . second } ] ]) >>> #(#(0 0) #(0 1) #(0 2) #(0 3) #(1 0) #(1 1) #(1 2) #(1 3) #(2 0) #(2 1) #(2 2) #(2 3) #(3 0) #(3 1) #(3 2) #(3 3))" self do: [ :first | self do: [ :second | aBinaryBlock value: first value: second ] ]3>> 22111ifFalse: alternativeBlock "Since the condition is true, the value is the true alternative, which is nil. Execution does not actually reach here because the expression is compiled in-line." "(true ifFalse: [ true ]) >>> nil" ^nilstringsSpecial case of exponent=1 0 even >>> true0.0J((RBScanner on: 'Pharo (, { exist ]' readStream) next; next) value >>> $(hello** exponent " A shortcut method for raisedTo: " "2 ** 8 >>> 256" "8 ** 2 >>> 64" "2 ** (1/12) >>> 1.0594630943592953" "2 ** -1 >>> (1/2)" ^ self raisedTo: exponent-24023 is number 0190.00110207pReturn a String representation of this number in base b with a minimum length and padded by 0 if zeroFlag is set<(RPackage named: 'MockPackage-tests') isTestPackage >>> true72Negation--answer false since the receiver is true.{ ^ 1 }021304211010 hex >>> '16rA'101(#(10 20 30) collect: [:e | e+1]) >>> #(11 21 31)02d3,Tests-unix-64-NewTools-Finder-Tests-Test.xml-3.14791[ ^ 1 ]uNote that there is no way to get the first element that works for all kinds of Collections. Must test every one.ffghi foobazortmin: aPoint "Answer the upper left corner of the rectangle uniquely defined by the receiver and the argument, aPoint." "((100@200) min: (330@400)) >>> (100@200)" "((100@200) min: (30@400)) >>> (30@200)" ^ (x min: aPoint x) @ (y min: aPoint y)/Negated value of all elements in the collection33010-""" 0 """ : """ B """ : """ B """ | """ 0 """2z(SmallDictionary newFromKeys: #(#x #y) andValues: #(3 6)) >>> (SmallDictionary new at: #x put: 3; at: #y put: 6 ;yourself)asDigitsToPower: anInteger do: aBlock "Repeatedly value aBlock with a single Array. Adjust the collection so that aBlock is presented all (self size raisedTo: anInteger) possible combinations of the receiver's elements taken as digits of an anInteger long number." "(Array streamContents: [:stream | (0 to: 1) asDigitsToPower: 4 do: [:each | stream nextPut: each copy]]) >>> #(#(0 0 0 0) #(0 0 0 1) #(0 0 1 0) #(0 0 1 1) #(0 1 0 0) #(0 1 0 1) #(0 1 1 0) #(0 1 1 1) #(1 0 0 0) #(1 0 0 1) #(1 0 1 0) #(1 0 1 1) #(1 1 0 0) #(1 1 0 1) #(1 1 1 0) #(1 1 1 1))" | aCollection | aCollection := Array new: anInteger. self asDigitsAt: 1 in: aCollection do: aBlock6(true ifFalse: [ 'This statement is false!' ]) >>> nil*(-0.5 arcTan: -0.5) >>> -2.35619449019234520up7274412atAnswer a copy of the receiver containing all but the last element. Raise an error if there are not enough elements.(Array streamContents: [:stream | #(1 2 3 4) select: [:each | each > 2 ] thenDo: [:each | stream nextPut: each + 10]]) >>> #(13 14)1b10001Return the reciever full of reciprocated elements3010+('Hello, World!' count: #isLowercase) >>> 8010672004('pharo' endsWith: '' caseSensitive: false) >>> true21a3303v131NReturn the class of the couple class/metaclass. Useful to avoid explicit test.,(3 ifNotNil: [:o | o +3 ] ifNil: [42]) >>> 6242|::afalse | true >>> true20182.006300.5 { 1 ]. 2 }abc#('''' unescapeCharacter: $') >>> ''0$' tokenish >>> false, 0vector2-3xcAnswer the index'th element of the receiver. If index is out of bounds, let it wrap around from the end to the beginning until it is in bounds. 16r800000001 00228J('Ab cd ef Ab cd' allRangesOfSubstring: 'cd') >>> {(4 to: 5). (13 to: 14)}1y1 | | . a: 94016^^133((0@0 corner: 100@100) containsPoint: 0@0) >>> trueC('aeiou' findFirstInByteString: 'hello world' startingAt: 1) >>> 2. a digit between 0 and 1 expected100200$A isAlphaNumeric >>> trueabc$Character space isSeparator >>> true, aCollection "Concatenate the receiver with the argument." "#(1 2 3) , #(4 5 6) >>> #(1 2 3 4 5 6)" ^self copy addAll: aCollection; yourself31d!#(a b c d e f g h i) third >>> #c742&[ :x "a""b""c""d" :y "e""f" | "g""h" ] 2r. 31$$X$salkjsdlkgfeealover 23106(#(1 2 3 4) asSet intersection: #() asSet) >>> Set new852ppp | T | t n. ^ 0 | T | t nn. t 0 sssss s t1, 000111213141516525040"$_ isConnectorPunctuation >>> true0221.40vector0101R(OrderedCollection new add: 41; add: 42 after: 41; yourself) asArray >>> #(41 42)11${ tokenish >>> false3 book-resultremoveAllFoundIn: aCollection "Remove each element of aCollection which is present in the receiver from the receiver. Answer aCollection. No error is raised if an element isn't found. ArrayedCollections cannot respond to this message." "(#(10 20 10 10) asOrderedCollection removeAllFoundIn: #(10 20 30); yourself) >>> #(10 10) asOrderedCollection" aCollection do: [:each | self remove: each ifAbsent: []]. ^ aCollection200polynomialEval: thisX "Treat myself as the coeficients of a polynomial in X. Evaluate it with thisX. First element is the constant and last is the coeficient for the highest power. #(1 2 3) polynomialEval: 2 is 3*X^2 + 2*X + 1 with X = 2" "(#(1 2 3) polynomialEval: 2) >>> 17" | sum valToPower | sum := self first. valToPower := thisX. 2 to: self size do: [ :ind | sum := sum + ((self at: ind) * valToPower). valToPower := valToPower * thisX ]. ^ sum 1, 2, 3 and 4OAnswer a Point whose x and y are the absolute values of the receiver's x and y.28ppp X  """"""""" (10 min: 20 max: 11) >>> 111$Tests-unix-64-Morphic-Tests-Test.xml27'hello'6x-2uflattened "Flattens a collection of collections (no matter how many levels of collections exist). Strings are considered atoms and, as such, won't be flattened" "( #(1 #(2 3) #(4 #(5))) flattened ) >>> #(1 2 3 4 5)" "( #('string1' #('string2' 'string3')) flattened ) >>> #('string1' 'string2' 'string3')" ^ Array streamContents: [ :stream | self flattenOn: stream ]R(#(10 20 30) adaptToCollection: #(0 1 2) andSend: #@) >>> {(0@10). (1@20). (2@30)}:= 2531| rectangles | rectangles := OrderedCollection new add: (Rectangle left: 5 right: 10 top: 0 bottom: 15); add: (Rectangle left: 0 right: 15 top: 5 bottom: 10); yourself. (Rectangle merging: rectangles) >>> (Rectangle left: 0 right: 15 top: 0 bottom: 15)Extract items from the receiver and use them as arguments of aBlock. Signal an error (ArgumentsCountMismatch) when the arguments count of aBlock does not match the receiver size.0An executable comment must be in its own comment block (enclosed in double quotes) and can be multi-line for better readability. Code editor hint: you can double click on the inner side of a double quote to select the whole comment block, then Cmd+I to evaluate and inspect the whole executable comment.weekday "Answer the name of the day of the week on which the receiver falls." "(Date year: 2018 month: 9 day: 28) weekday >>> #Friday" ^ self dayOfWeekNamepaddedWith: otherCollection do: twoArgBlock "Evaluate twoArgBlock with corresponding elements from this collection and otherCollection. Missing elements from either will be passed as nil." "(Array streamContents: [:stream | #(10 20 30) paddedWith: #(40 50 60) do: [:first :second | stream nextPut: (first + second)]]) >>> #(50 70 90) " "(Array streamContents: [:stream | #(10 20 30) paddedWith: #(40 50) do: [:a :b | stream nextPut: {a. b} ]]) >>> #(#(10 40) #(20 50) #(30 nil)) " "(Array streamContents: [:stream | #(10 20) paddedWith: #(40 50 60) do: [:a :b | stream nextPut: {a. b} ]]) >>> #(#(10 40) #(20 50) #(nil 60))" 1 to: (self size max: otherCollection size) do: [:index | twoArgBlock value: (self at: index ifAbsent: []) value: (otherCollection at: index ifAbsent: [])]100\at: firstKey at: secondKey "Return the object stored in the second dictionary at secondKey. The second dictionary is accessed via the key firstKey." " (Dictionary new at: #top at: #below1 put: 1; at: #top at: #below1 put: 2; at: #top at: #below1) >>> 2" ^ self at: firstKey at: secondKey ifAbsent: [ self errorKeyNotFound: secondKey ]1000|Try to find a number somewhere in this string, as explained in Number>readFrom: this method returns the first number found' ' size >>> 2(10 to:1) size >>> 0631c 033q(String streamContents: [:s | 'Pharo is cool' splitOn: Character space do: [:each | s << each ]])>>>'Pharoiscool'012.Tests-unix-64-EmergencyDebugger-Tests-Test.xml632hexString "Returns a string representation of the receiver as hexadecimal, prefixed with 16r." "Consider using any of printStringHex printStringBase: 16 printStringBase: 16 length: 8 padded: true storeStringHex storeStringBase: 16 storeStringBase: 16 length: 11 padded: true" "12 hexString >>> '16rC'" "10 hexString >>> '16rA'" "-10 hexString >>> '-16rA'" ^ self storeStringBase: 162512U(true ifFalse: [ 'That is false!' ] ifTrue: [ 'That is true!' ]) >>> 'That is true!'1640vector01 Pharo is coolE'foo' asOrderedCollection = #($o $o $f) asOrderedCollection >>> false5"Character space tokenish >>> false''''' 2Message expected0.016#'a''b' isAllAlphaNumerics >>> falsefoo*bazd 0:B| | |u0${1@ -2. -4@0} abs >>> {(1@2). (4@0)}"'3123' isAllAlphaNumerics >>> true11317#hello. #world this string will be trimmed 2120113979'8Return a String representation of this number in base b.###$fromStreamWithComments: readStream "Parse and materialize the STON representation in the character readStream, skipping C-style comments" "(STON fromStreamWithComments: 'Point[1,/*comment*/2]' readStream) >>> (1@2)" ^ (self reader on: (STONCStyleCommentsSkipStream on: readStream)) nexttrue | true >>> trued228 September 2018zz1010011110004444222230055666612{ }kAnswer my element at index anInteger. at: is used by a knowledgeable client to access an existing element.3100(Array streamContents: [ :stream | #(0 1 2 3) allPairsDo: [ :first :second | stream nextPut: { first . second } ] ]) >>> #(#(0 0) #(0 1) #(0 2) #(0 3) #(1 0) #(1 1) #(1 2) #(1 3) #(2 0) #(2 1) #(2 2) #(2 3) #(3 0) #(3 1) #(3 2) #(3 3))1i001000($b > $c) asBit>>> 02h(#(2 2 3 3 4 1 2 3 3 5) splitOn: [:each | each > 3])>>> #(#(2 2 3 3) #(1 2 3 3) #()) asOrderedCollection=(KeyboardKey named: 'SHIFT_L') >>> (KeyboardKey value: 65505)foo:a foo+ arg "Pairwise sum of two sequenceable collections of the same length." "#(0 1 2) + #(10 20 30) >>> #(10 21 32)" "{0@1. 2@3} + {10@20. 30@0} >>> {(10@21). (32@3)}" ^ arg adaptToCollection: self andSend: #+ Hello, World!#(1 5 10 -4) min >>> -412Answer a ByteArray whose elements are the elements of the receiver. Implementation note: Cannot use ''ByteArray withAll: self'' as that only works for SequenceableCollections which support the replacement primitive.-4Point classSide >>> Point classe1000.03Class structural inspection - Class/Metaclass shift(Array streamContents: [:stream | #(10 20 30) paddedWith: #(40 50) do: [:a :b | stream nextPut: {a. b} ]]) >>> #(#(10 40) #(20 50) #(30 nil)) 11112In \{1\} you can escape \{ by prefixing it with \\ytwo1110b33hello'Tests-unix-64-Roassal-Mondrian-Test.xml110050023 slowFactorial >>> 610000000000000^ . ^ 110@. 51y(#(1 5 21 28 34) groupedBy: [:x| x // 10] having: [:v| v size = 2]) >>> {0->#(1 5). 2->#(21 28)} asOrderedDictionary,Tests-unix-64-System-Settings-Tests-Test.xmlAnswer the index of the first occurrence of anElement after start within the receiver. If the receiver does not contain anElement, answer the result of evaluating the argument, exceptionBlock.seventh "Answer the seventh element of the receiver. Raise an error if there are not enough elements." "#(a b c d e f g h i) seventh >>> #g" ^ self at: 714 11e50n0Xn02210n(Array streamContents: [:stream | #(1 2 3) allButFirstDo: [:each | stream nextPut: (each + 10)]]) >>> #(12 13)1 0:00:01:021002pharofred is number 151(1923 truncateTo: 10) >>> 1920T(#(10 20) asSet fillFrom: 'ABC' with: [:x|x asciiValue]) >>> #(10 20 65 66 67) asSet1B 'TheRollingStones' normalizeCamelCase >>> 'The Rolling Stones' Evaluate aBlock with each of the receiver's elements as the argument. Answer the first element for which aBlock evaluates to true. If none evaluate to true, then evaluate the argument, exceptionBlock.33 222222222 67231 ppp < < n< >Tests-unix-64-SystemCommands-RefactoringSupport-Tests-Test.xml52565one-3110`ifNotNil: ifNotNilBlock ifNil: nilBlock "If the receiver is not nil, pass it as argument to the ifNotNilBlock block. else execute the nilBlock block" "Might be compiled inline for speed, see RBMessageNode>>#isInlineIfNil" "(nil ifNotNil: [:o | o +3 ] ifNil: [42]) >>> 42" "(3 ifNotNil: [:o | o +3 ] ifNil: [42]) >>> 6" ^ ifNotNilBlock cull: self010 That is true!3-198115-2.567#() isEmptyOrNil >>> trueK(STON fromStreamWithComments: 'Point[1,/*comment*/2]' readStream) >>> (1@2)1316rFFdef12310%(false and: [Error signal]) >>> falseakeywordsStrict "Returns the keywords of the provided selector. If the receiver is not keyword-based, an empty array is returned." "#foo: keywordsStrict >>> #('foo:')" "#foo:bar: keywordsStrict >>> #('foo:' 'bar:')" "#foo keywordsStrict >>> #()" "#+ keywordsStrict >>> #()" ^ self isKeyword ifTrue: [ self keywords ] ifFalse: [ #( ) ]5(((100@200) max: (330@400)) >>> (330@400)8('fred the bear' copyWithoutAll: 'aeiou ') >>> 'frdthbr'1220xz Not found10XnXnX0splitOn: splitter do: aBlock "Perform an action specified as aBlock to each of the elements of the receiver that have been split using the splitter argument. splitter - can be a subsequence, a Block or a Regex (String receiver only). Any other object used as a splitter is treated as an Array containing that object." "(String streamContents: [:s | 'Pharo is cool' splitOn: Character space do: [:each | s << each ]])>>>'Pharoiscool'" ^ splitter split: self do: aBlock101OrderedCollection new class >>> OrderedCollection3030vector01110002d1 pharo-projectpermutationsDo: aBlock "Repeatly value aBlock with a single copy of the receiver. Reorder the copy so that aBlock is presented all (self size factorial) possible permutations." "(Array streamContents: [:stream | (1 to: 3) permutationsDo: [:each | stream nextPut: each copy]]) >>> #(#(1 2 3) #(1 3 2) #(2 1 3) #(2 3 1) #(3 2 1) #(3 1 2))" self shallowCopy permutationsStartingAt: 1 do: aBlock0Message pattern expectedd71916EAnswer the value of the alternativeBlock since the receiver is false.3Answer whether the receiver can be represented as a byte string. This is different from asking whether the receiver *is* a ByteString (i.e., #isByteString)findBinaryIndex: aBlock ifNone: exceptionBlock "Search for an element in the receiver using binary search. The argument aBlock is a one-element block returning 0 - if the element is the one searched for <0 - if the search should continue in the first half >0 - if the search should continue in the second half If no matching element is found, evaluate exceptionBlock, with the 'bounding' elements as optional arguments." "(#(1 3 5 7 11 15 23) findBinaryIndex: [ :arg | 25 - arg ] ifNone: [ :a :b | 'between: ',{a. b} printString ]) >>> 'between: #(7 8)' " "(#(1 3 5 7 11 15 23) findBinaryIndex: [ :arg | 25 - arg ] ifNone: [ :a :b | 'over index: ', a printString ]) >>> 'over index: 7' " ^ self findBinaryIndex: aBlock do: [ :found | found ] ifNone: exceptionBlock101a1a1allRangesOfSubstring: aSubstring "('Ab cd ef Ab cd' allRangesOfSubstring: 'cd') >>> {(4 to: 5). (13 to: 14)}" "('Ab cd ef Ab cd' allRangesOfSubstring: 'zz') >>> #()" ^ Array streamContents: [:s | | start subSize | start := 1. subSize := aSubstring size. [start isZero] whileFalse: [ start := self findString: aSubstring startingAt: start. start > 0 ifTrue: [s nextPut: (start to: start + subSize - 1). start := start + subSize]]]13('abcdefgh' includesSubstring: 'de' at: 4) >>> true32(1 sign: 2) ; bar 5053020102ppp < <<<< n>> #[1 2]2011100 00 n n n 0 0& aBoolean "Evaluating conjunction. Evaluate the argument. Then answer true if both the receiver and the argument are true." "true & true >>> true" "true & false >>> false" "false & true >>> false" "false & false >>> false" self subclassResponsibility622(Array streamContents: [:stream | #(10 20 30 40 50) groupsOf: 2 atATimeDo: [:first :second | stream nextPut: (first + second)]]) >>> #(30 70)%Tests-unix-64-Sindarin-Tests-Test.xml& aBoolean "Evaluating conjunction -- answer false since receiver is false." "false & true >>> false" "false & false >>> false" ^self|- 11 0000222226665$(#(a b a d a) lastIndexOf: #a) >>> 5KasInteger "Answer 1 since receiver is true." "true asInteger >>> 1" ^ 1Hello!10true | false >>> true'|' or variable expecteda1523;Convert to a ByteArray with the ascii values of the string.cn(#(first (second third) ((allSentMessages ('Elvis' includes:)))) includesSubstringAnywhere: 'lvi') >>> trueisInstanceSide "Return true whether the receiver is a class (in a couple class/metaclass sense)." "Point isInstanceSide >>> true" "Point class isInstanceSide >>> false" ^ self isClassSide not#name asMutator >>> #name:78a20101010asByteArray "Answer a ByteArray whose elements are the elements of the receiver. Implementation note: Cannot use ''ByteArray withAll: self'' as that only works for SequenceableCollections which support the replacement primitive." "{1. 2} asByteArray >>> #[1 2]" "#[1 2] asByteArray == #[1 2] >>> true" "'foo' asByteArray >>> #[102 111 111]" "#() asByteArray >>> #[]" | array index | array := ByteArray new: self size. index := 0. self do: [:each | array at: (index := index + 1) put: each]. ^ arrayU(true ifFalse: [ 'That is false!' ] ifTrue: [ 'That is true!' ]) >>> 'That is true!'16< aString "Answer whether the receiver sorts before aString. The collation order is simple ascii (with case differences)." " 'abc' < 'def' >>> true" " 'abc' < 'abc' >>> false" " 'def' < 'abc' >>> false" ^ (self compare: self with: aString) < 0a Not found1Make some empty slots at the front of the array. If we have more than 50% free space, then just move the elements, so that the first 50% of the slots are free, otherwise add new free slots to the front by growing. Precondition: firstIndex = 1We-6ifTrue: alternativeBlock "If the receiver is false (i.e., the condition is false), then the value is the false alternative, which is nil. Otherwise answer the result of evaluating the argument, alternativeBlock. Create an error notification if the receiver is nonBoolean. Execution does not actually reach here because the expression is compiled in-line." "(true ifTrue: [ 'This statement is true!' ]) >>> 'This statement is true!'" "(false ifTrue: [ 'This statement is true!' ]) >>> nil" self subclassResponsibility22222000011111X u0vector0Answer an Array whose elements are the elements of the receiver. Implementation note: Cannot use ''Array withAll: self'' as that only works for SequenceableCollections which support the replacement primitive.'('Hello' detectMax: #asciiValue) >>> $o aa bb cc dd157.10Tests-unix-64-Roassal-Interaction-Tests-Test.xml11330200.91170n s n6414keywords "Returns the keywords of the provided selector. Assumes the reciever is a valid keyword based selector (@reciever isKeyword > true). Prefer using Symbol>>#keywordsStrict if you're not sure if the reciever is keyword-based." "#foo: keywords >>> #('foo:')" "#foo:bar: keywords >>> #('foo:' 'bar:')" "#foo keywords >>> #('foo')" "Invalid input/output !" "#+ keywords >>> #('+')" "Invalid input/output !" | keywords | keywords := Array streamContents: [ :kwds | | kwd | kwd := (String new: 16) writeStream. self do: [ :char | kwd nextPut: char. char = $: ifTrue: [ kwds nextPut: kwd contents. kwd reset ] ]. kwd position = 0 ifFalse: [ kwds nextPut: kwd contents ] ]. ^ keywords 1.1 milliSecond printString >>> '0:00:00:00.001'2pEvaluating conjunction. Evaluate the argument. Then answer true if both the receiver and the argument are true.1oasStringOn: aStream delimiter: delimString last: lastDelimString "Print elements on a stream separated with a delimiter between all the elements and with a special one before the last like: 'a, b and c'. Uses #asString instead of #print: Note: Feel free to improve the code to detect the last element." "(String streamContents: [:s| 'abcd' asStringOn: s delimiter: ', ' last: ' and ']) >>> 'a, b, c and d'" | n sz | n := 1. sz := self size. self do: [:elem | n := n + 1. aStream nextPutAll: elem asString] separatedBy: [ aStream nextPutAll: (n = sz ifTrue: [lastDelimString] ifFalse: [delimString])](String streamContents: [:s| {'one'->1. 'two'->2} asOrderedDictionary associationsDo: [:a| s << a key << ':' << a value asString << ';']]) >>> 'one:1;two:2;'| T t | t nn. ^ t60#(# ## #ab #10 #. 10).lastIndexOf: anElement "Answer the index of the last occurrence of anElement within the receiver. If the receiver does not contain anElement, answer 0." "(#(a b a d a) lastIndexOf: #a) >>> 5" "(#(a b a d e) lastIndexOf: #a) >>> 3" ^ self lastIndexOf: anElement startingAt: self size ifAbsent: [0]Consider using any of printStringHex printStringBase: 16 printStringBase: 16 length: 8 padded: true storeStringHex storeStringBase: 16 storeStringBase: 16 length: 11 padded: true10.1203swap: oneIndex with: anotherIndex "Move the element at oneIndex to anotherIndex, and vice-versa." "({#a. #b. #c. #d. #e} swap: 5 with: 1) >>> #(e b c d a)" | element | element := self at: oneIndex. self at: oneIndex put: (self at: anotherIndex). self at: anotherIndex put: element/| thisContext | thisContext := 1. ^ thisContext1second "Answer a number that represents the number of complete seconds in the receiver's time part, after the number of complete minutes has been removed." "(DateAndTime fromString: '2004-02-29T13:33:12+02:00') second >>> 12" ^ self localSeconds \\ 603 2 ] thenCollect: [:each | each + 10 ]) >>> #(13 14)60.0(100@200) floor >>> (100@200)1`(#('We' 'love' 'pharo!') withIndexSelect: [:value :index | value size - 1 <= index]) >>> #('We')312m(Array streamContents: [:stream | #(1 2 3) allButLastDo: [:each | stream nextPut: (each + 10)]]) >>> #(11 12)1oops122222222222000011111111111X'let us make seperate strings' substrings >>> #('let' 'us' 'make' 'seperate' 'strings')+#(("A")"B"."C":"D";"E"["F"]"G"{"H"}"I"^"J")30Xsuuu 2r00101000)Color black rgbTriplet >>> #(0.0 0.0 0.0)-1#$) isConnectorPunctuation >>> false0-1or: alternativeBlock "Nonevaluating disjunction -- answer true since the receiver is true." "(true or: [Error signal]) >>> true" "(true or: [false]) >>> true" ^ self0.530#() sumNumbers >>> 0(#(1 3 5 7 11 15 23) findBinary: [ :arg | 12 - arg ] do: [ :found | found ] ifNone: [ :a :b | 'between: ', {a. b} printString ]) >>> 'between: #(11 15)'000000000000000000 project-pharo60000224455655597777855BBBCBBBEBBAAAAAAAAGGFFFH44333333#(3.1479 truncateTo: 0.01) >>> 3.141#(a b c d e) size >>> 51180.011d3'65555544444433332222211111100000000000028100X| TT | tt n. tt s n Xuuuuuu n uuu 1720010FileLocator temp / ('{1}.ston' format: { Time millisecondClockValue }) in: [ :file | file writeStreamDo: [ :out | STON put: 1@2 onStream: out ]. file readStreamDo: [ :in | STON fromStream: in ] ]VConvert to CamelCase, i.e, remove spaces, and convert starting lowercase to uppercase.1{10@20. 30@0} // {1@3. 4.0@1} >>> {(10@6). (7@0)} 565555554444810isminute "Answer a number that represents the number of complete minutes in the receiver' time part, after the number of complete hours has been removed." "(DateAndTime fromString: '2004-02-29T13:33:00+02:00') minute >>> 33" ^ self localSeconds // SecondsInMinute \\ 6001$' isFinalQuote >>> false3.0Alias for intersection:5 slowFactorial >>> 120(String streamContents: [ :str| ((FileSystem workingDirectory / 'book-result' / 'W01-Welcome') relativeToReference: FileSystem workingDirectory) printPathOn: str]) >>> 'book-result/W01-Welcome'Returns the keywords of the provided selector. Assumes the reciever is a valid keyword based selector (@reciever isKeyword > true). Prefer using Symbol>>#keywordsStrict if you're not sure if the reciever is keyword-based.9fghitwo100:00:00:00.00100000200n#n#n0b%('hello' includesAny: 'hop') >>> trueremoveAll: aCollection "Remove each element of aCollection from the receiver. If successful for each, answer aCollection. Otherwise create an error notification. ArrayedCollections cannot respond to this message." "(#(10 20 10 30 10) asOrderedCollection removeAll: #(10 10 20); yourself) >>> #(30 10) asOrderedCollection" aCollection == self ifTrue: [^self removeAll]. aCollection do: [:each | self remove: each]. ^ aCollectionIIf the receiver is true (i.e., the condition is true), then the value is the true alternative, which is nil. Otherwise answer the result of evaluating the argument, alternativeBlock. Create an error notification if the receiver is nonBoolean. Execution does not actually reach here because the expression is compiled in-line.6b401b04888 000999060AAA070BBB00 CCC goodby: my: 3*kkkk sssssss 0 ^ n 0 ssssssss 0 ^ n 0. ^ n1 goodby: my: 3abcConvert me to a float point transforming both of my coordinates to floats using #asFloat. If x and y are already represented by floats return myself, otherwise create a new Point instance.!Character lf isSeparator >>> true2#. 1 r0te23-30.4995112414467253#('pharo' endsWith: 'aRo') >>> false3#(1 5 10 -4) max >>> 10ar: r g: g b: b "Return a color with the given r, g, and b components in the range [0.0..1.0]." "(Color r: 1 g: 1 b: 1) >>> Color white" ^ self r: r g: g b: b alpha: 1.0$(nil ifNotNil: [:o | o +3 ]) >>> nil110MReturns the hex digit part of the integer when printed in hexadecimal format.0.54{1 . 2 . 3 . 4 . 5} asSortedCollection median >>> 320 1 foo:;bar3"'foo' asNewArray >>> 'foo' asArray31collect: collectBlock thenReject: rejectBlock "Optimized version of Collection>>#thenReject:" "(#(1 2 3) collect: [:each | each + 10 ] thenReject: [:each | each even]) >>> #(11 13)" | each | ^ self class new: self size streamContents: [ :stream | 1 to: self size do: [:index | each := collectBlock value: (self at: index). (rejectBlock value: each) ifFalse: [ stream nextPut: each ]]]1104W(false ifTrue: [ 'That is true!' ] ifFalse: [ 'That is false!' ]) >>> 'That is false!'6ppp ^ 0 :B | 1 | T | t nn. t 1 sssss s b 0 ssssss nhello ) ] }3%3 ( 1 }. 2 )203110 | TTT | ttt n . ^ ttt . XXXX""XXX""XD(OrderedCollection new addAll: (1 to: 15); yourself) capacity >>> 20421ABA3.#mySelector asTestSelector >>> #testMySelector16FAnswer 1 if the receiver is greater than 0, -1 if less than 0, else 0.111is111n.154stringsd421011110ad$} isClosePunctuation >>> true10asa1234240.05inject: thisValue into: binaryBlock "Accumulate a running value associated with evaluating the argument, binaryBlock, with the current value of the argument, thisValue, and the receiver as block arguments." "Look at Collection>>reduce: for a related method." "(#(2r101 2r11 2r1000) inject: 0 into: [ :acc :each | acc bitXor: each ]) >>> 2r1110" "(#(10 20 30) inject: 0 into: [ :sum :each | sum + each ]) >>> 60" "But use sum or sum: instead!" "#(10 20 30) sum >>> 60" "(#(10 20 30) inject: OrderedCollection new into: [ :a :e | a add: (e + 1). a ]) >>> #(11 21 31) asOrderedCollection" "But use collect: or collect:as: instead!" "(#(10 20 30) collect: [:e| e+1]) >>> #(11 21 31)" | nextValue | nextValue := thisValue. self do: [:each | nextValue := binaryBlock value: nextValue value: each]. ^nextValue413A2000copyEmpty "Return a new empty collection based on the species" "{1@2} copyEmpty >>> #()" "'hello' copyEmpty >>> ''" "(1 to: 10) copyEmpty >>> #()" ^ self species newREvaluates the argument with the read stream of the collection. Answers the result.D'foo' asOrderedCollection = #($f $o $o) asOrderedCollection >>> true1Tests-unix-64-Refactoring-DataForTesting-Test.xml-1X X X Xd-Here 123should % be 6 the name6 of the method5abcdefgh1"(10 printStringBase: 2) >>> '1010'7Answer a Point scaled by factor (an instance of Point).b (10 printStringBase: 16) >>> 'A'29('pharo' beginsWith: 'Pha' caseSensitive: false) >>> true2RReturn the metaclass of the couple class/metaclass. Useful to avoid explicit test.12{ [ ( iAnswer a copy of the receiver in which all occurrences of oldSubstring have been replaced by newSubstring200ppp < <<<<>> falseXXaXX119;(#(1 2 3) reduceRight: [ :a :b | a - b ]) >>> (1 - (2 - 3))132#Tests-unix-64-Epicea-Tests-Test.xmlincludesAny: aCollection "Answer whether any element of aCollection is one of the receiver's elements." "(#(10 20 30) includesAny: #(30 40)) >>> true" "(#(10 20 30) includesAny: #(50 40)) >>> false" "(#(10 20 30) includesAny: #()) >>> false" "('hello' includesAny: 'hop') >>> true" "('hello' includesAny: 'pwn') >>> false" aCollection do: [:elem | (self includes: elem) ifTrue: [^ true]]. ^ false00112131116444455117001 true. := trueKExecutes aBlock on each of the receiver's elements except for the first onecbetween: #(5 6)2'a' asByteArray >>> #[97]510^This is implemented using a variant of the normal inject:into: pattern. The reason for this is that it is not known whether we're in the normal number line, i.e. whether 0 is a good initial value for the sum. Consider a collection of measurement objects, 0 would be the unitless value and would not be appropriate to add with the unit-ed objects.33|generator| generator := Generator onDo: [ :doBody | Integer primesUpTo: 10000000 do: doBody ]. (generator next: 5) asArray >>> #(2 3 5 7 11)1.042000r1 0000000Xn. Xu. X n. X"""n20280:00:00:00.002202def1.0594630943592953#{ 2. 1+1 } asIdentitySet size >>> 12a40a0000vector0240vector0230foo ^ [ :a | [ :a | a ] value: 10 + a ] value: 10seperate&#(1 2 3) , #(4 5 6) >>> #(1 2 3 4 5 6)Optimized implementation1a : foo%#(10 20 30) \ (0 to: 15) >>> #(20 30) *foo#zort1ab%Answer the factorial of the receiver.&Character home isControlOther >>> trueflatCollect: aBlock "Evaluate aBlock for each of the receiver's elements and answer the list of all resulting values flatten one level. Assumes that aBlock returns some kind of collection for each element. Equivalent to the lisp's mapcan" "( #((3 4) (1 2)) flatCollect: [:each | each ] ) >>> #(3 4 1 2)" "( #(3 4 1 2) flatCollect: [:each | { each. each*10 } ] ) >>> #(3 30 4 40 1 10 2 20)" ^ self flatCollect: aBlock as: self speciesifNotNil: aBlock "If the receiver is not nil, pass it as argument to the block." "Might be compiled inline for speed, see RBMessageNode>>#isInlineIfNil" "(2 ifNotNil: [ :o | o + 3]) >>> 5" "(nil ifNotNil: [:o | o +3 ]) >>> nil" ^ self040test te string\Answer the eighth element of the receiver. Raise an error if there are not enough elements.c5311 X X X1210yAnswer the element after target. Raise an error if target is not in the receiver, or if there are no elements after it.46foo ^ [ :a | [ | a | a := 10. a ] value + a ] value: 1action7$25 ]c-3JRunning min. See the comment of self >> #running:of: for more information.A244.02FF000030Cascade message expected~Returns #left, #right or #center if the otherPoint lies to the left, right or on the line given by the vector from 0@0 to selfdendsWithDigit "Answer whether the receiver's final character represents a digit." "'foo10' endsWithDigit >>> true" "'foo10foo' endsWithDigit >>> false" "'foo1' endsWithDigit >>> true" ^ self notEmpty and: [self last isDigit]2009Answer the set theoretic intersection of two collections.A({1@2. 6@3. 2@ -1.} select: [:e| e x > e y]) >>> {(6@3). (2@ -1)} hello world115*#( aa:bb: cc #'aa:bb:cc' #cc #'++' #'++' )foo "z" "a" 1. "b" "c" ^ 2 "d"(1@2.2) isFloatPoint >>> false15rindexOfAnyOf: aCollection "Answer the index of the first occurrence of any element included in aCollection within the receiver. If the receiver does not contain anElement, answer zero, which is an invalid index." "(#(a b c d e) indexOfAnyOf: #(x y c)) >>> 3" "(#(a b c d e) indexOfAnyOf: #(x y z)) >>> 0" ^self indexOfAnyOf: aCollection startingAt: 1 ifAbsent: [0]oAnswer whether the receiver sorts before aString. The collation order is simple ascii (with case differences).1join: aSequenceableCollection "Append the elements of the argument, aSequenceableCollection, separating them by the receiver." "(Character space join: #('Pharo' 'is' 'cool')) >>> 'Pharo is cool'" ^ (Array with: self) join: aSequenceableCollection1111Return all the combinations of elements of the receiver. Note that combinations does not include the empty element contrary to the mathematical definition of combinations.22streamContents: blockWithArg limitedTo: sizeLimit "A variant of #streamContents: with a strict size limit" "(String streamContents: [:s | 10 timesRepeat: [s nextPutAll: 'foo']] limitedTo: 9) >>> 'foofoofoo'" | stream | stream := LimitedWriteStream on: (self streamSpecies new: (100 min: sizeLimit)) limit: sizeLimit limitBlock: [ ^ stream contents ]. blockWithArg value: stream. ^ stream contentsUnmatched ' in string literal.165536 bytesCount >>> 365142621000milliSecond "1 milliSecond printString >>> '0:00:00:00.001'" "(1 second + 1 milliSecond) printString >>> '0:00:00:01.001'" ^ self milliSeconds Size of replacement doesnt match6031005'Return collection printed as 'a, b, c' 15a10000000002000006mcloseTo: aSequenceableCollection precision: aPrecision "Return true if all my elements are close to the elements of same index of the parameter with a certain precision" "(#(1.9283 2.3029) closeTo: #(1.9284 2.3028) precision: 0.001) >>> true" self with: aSequenceableCollection do: [ :a :b | (a closeTo: b precision: aPrecision) ifFalse: [ ^ false ] ]. ^ truea({'1'. '2'. '3'. '4'} atRandom: (Random seed: -42) weighting: [ :each | each asInteger ]) >>> '4'100$Tests-unix-64-DrTests-Tests-Test.xml 322222256hello-11920Extract a selector with keyword parts from the receiver. While this doesn't give a true parse, in most cases it does what we want, in where it doesn't, we're none the worse for it.0.0132an OrderedDictionary(true->#(1 3 5) false->#(2 4)) abcdf abcedf50?Print the receiver's path on aStream (without 'Path' prepended)%Answer 0 since the receiver is false.-1279previous: dayName "Answer the previous date whose weekday name is dayName." "((Date year: 2018 month: 9 day: 28) previous: 'Sunday') printString >>> '23 September 2018'" | days | days := 7 + self weekdayIndex - (self class dayOfWeek: dayName) \\ 7. days = 0 ifTrue: [ days := 7 ]. ^ self subtractDays: daysafghi $2y0104301010"(10 printStringBase: 2) >>> '1010'1'(6 numberOfCombinationsTaken: 3) >>> 20| a bt({10. 20} asOrderedCollection addAll: {20. 30. 30. 40.}; yourself) >>> {10. 20. 20. 30. 30. 40.} asOrderedCollection#(:="A"aa:="B":=="C"cc:=="D")xa$Optimized version based on primitive1For backwards compatibility mainly. Return the key that should correspond to some character. Handle normal ascii characters and special control keys only (enter, tab space...)3(#(1 5 10) detectIndex: [ :each | each > 3 ]) >>> 270coolJTake the minimum between self and maxValue, then the maximum with minValuebetween: #(11 15)10102204216de:Answer whether anObject is one of the receiver's elements.-10'{1. 2} asSet = {1. 2. 2} asSet >>> truebLOL501n uuuuuuu n uuu K'A man, a plan, a canal, panama' asCamelCase >>> 'AMan,APlan,ACanal,Panama'10, 15, 20 and 25Nonevaluating disjunction. If the receiver is false, answer the value of the argument, alternativeBlock; otherwise answer true without evaluating the argument.aeiou7_(#(11 22 33) asOrderedCollection atWrap: 6 put: 0; yourself) >>> #(11 22 0) asOrderedCollectionminutes "2 minutes printString >>> '0:00:02:00'" "(1 hour + 2 minutes) printString >>> '0:01:02:00'" ^ Duration minutes: self2{Answer whether the receiver sorts before or equal to aString. The collation order is simple ascii (with case differences).VAnswer a copy of the receiver that does not contain any elements equal to oldElement.\ aCollection "Return all the elements in self that are not in aCollection. Alias of difference:" "#(10 20 30) \ (0 to: 15) >>> #(20 30)" "'abc' \ 'cbe' >>> 'a'." ^ self difference: aCollection1mobaz'10' asInteger >>> 1021rounded "Answer the integer nearest the receiver." "1.4 rounded >>> 1" "1.5 rounded >>> 2" "2 rounded >>> 2" "-1.5 rounded >>> -2" ^(self + (self sign / 2)) truncated1030[ | a a | a := 10. a ]longone!'elvis ' lastSpacePosition >>> 73.01113 0)(1.2 arcTan: 1.5) >>> 0.6747409422235526#+ keywordsStrict >>> #()0000031.0whatever(Array streamContents: [:stream | (0 to: 1) asDigitsToPower: 4 do: [:each | stream nextPut: each copy]]) >>> #(#(0 0 0 0) #(0 0 0 1) #(0 0 1 0) #(0 0 1 1) #(0 1 0 0) #(0 1 0 1) #(0 1 1 0) #(0 1 1 1) #(1 0 0 0) #(1 0 0 1) #(1 0 1 0) #(1 0 1 1) #(1 1 0 0) #(1 1 0 1) #(1 1 1 0) #(1 1 1 1))2312asNewArray "Like asArray: but return a copy if self is already an Array. This ensures that the result is always a new Array" "'foo' asNewArray >>> 'foo' asArray" "|a| a := #(1 2 3). a asNewArray == a >>> false" ^ self asArrayisCurrencySymbol "Return whether the receiver is one of these characters: $ and euro" "$$ isCurrencySymbol >>> true" "Character euro isCurrencySymbol >>> true" "$} isControlOther >>> false" ^ self characterSet isCurrencySymbol: self'('hello' union: 'world') >>> 'whlorde' 0 825373492isInsideRectangle: aRectangle "Answer true whether the receiver is inside the argument (following Rectangle>>#containsPoint: semantics" "(50@50 isInsideRectangle: (0@0 corner: 100@100)) >>> true" "(0@0 isInsideRectangle: (0@0 corner: 100@100)) >>> true" "(0@10 isInsideRectangle: (0@0 corner: 100@100)) >>> true" "(100@100 isInsideRectangle: (0@0 corner: 100@100))>>> false" "(100@90 isInsideRectangle: (0@0 corner: 100@100))>>> false" ^ aRectangle containsPoint: self-102312311((200@200 scaleTo: 400@400) >>> (2.0@2.0)-412212abcd32!pppp A ^ 0 :B | b 0 ssssss nn s a1)Evaluate aBlock with my elements taken n at a time. Ignore any leftovers at the end. Allows use of a flattened array for things that naturally group into groups of n. If aBlock has a single argument, pass it an array of n items, otherwise, pass the items as separate arguments. See also pairsDo:16||* """ | """ T """ | """ t """ """ n """ -(3 ifNil: [42] ifNotNil: [:o | o +3 ]) >>> 612'('hello world' occurrencesOf: $l) >>> 313abcisAllDigits "Return whether the receiver is composed entirely of digits and has at least one digit" "'2345' isAllDigits >>> true" "'0002345' isAllDigits >>> true" "'2345.88' isAllDigits >>> false" self do: [:c | c isDigit ifFalse: [^ false]]. self ifEmpty: [^false]. ^ true121213-4(false xor: [false]) >>> falsebfoo < bar: 1 + 1 > ######a0004215 factorial >>> 120e22001between: #(23 nil)Answer the index of the first occurrence of anElement within the receiver. If the receiver does not contain anElement, answer 0.32y002231141155600 100000000&('aXb' escapeCharacter: $X) >>> 'aXXb' That is true!(('Hello!' detectMin: #asciiValue) >>> $!Evaluate aBlock with each of the receiver's elements as the argument. Collect the resulting values into aCollection. Answer aCollection.storeStringHex "Returns a string representation of the receiver in base 16 in a way that executing it will return the receiver." "10 storeStringHex >>> '16rA'" ^ self storeStringBase: 162foo hello11100Answer the element at my position index. If I do not contain an element at index, answer the result of evaluating the argument, exceptionBlock.2'foo: a ^ [ | a | a := 10. a ] value + a 00001111111020 over index: Ab cd ef Ab cd Point[1,2]33AReturn the hue of this color, an angle in the range [0.0..360.0].2334pharo13000n0X0n06 2 even >>> true0011##########015130100.66742-4a := 91def$Do the special case of integer power1529' hello ' surroundedBySingleQuotes >>> ''' hello '''AEvaluating conjunction -- answer aBoolean since receiver is true.02compare: string1 with: string2 collated: order "'abc' = 'abc' asWideString >>> true" "'abc' asWideString = 'abc' >>> true" "(ByteArray with: 97 with: 0 with: 0 with: 0) asString ~= 'a000' asWideString >>> true" "('abc' sameAs: 'aBc' asWideString) >>> true" "('aBc' asWideString sameAs: 'abc') >>> true" "('a000' asWideString ~= (ByteArray with: 97 with: 0 with: 0 with: 0) asString) >>> true" "((ByteArray with: 97 with: 0 with: 0 with: 0) asString sameAs: 'Abcd' asWideString) >>> false" "('a000' asWideString sameAs: (ByteArray with: 97 with: 0 with: 0 with: 0) asString) >>> false" (string1 isByteString and: [ string2 isByteString ]) ifTrue: [ ^ string1 compareWith: string2 collated: order ]. "Primitive does not fail properly right now" ^ String compare: string1 with: string2 collated: orderaa2Zjoin: aCollection "Append the elements of the argument, aSequenceableCollection, separating them by the receiver." "({Character space. Character space} join: #('Pharo' 'is' 'cool')) >>> {$P. $h. $a. $r. $o. Character space. Character space. $i. $s. Character space. Character space. $c. $o. $o. $l}" "NB: this implementation only works for Array, since WriteStreams only work for Arrays and Strings. (!) Overridden in OrderedCollection and SortedCollection." ^ self class streamContents: [:stream | aCollection do: [:each | each joinTo: stream] separatedBy: [stream nextPutAll: self]]Unknown annotation201453lowBit " Answer the index of the low order one bit. First we skip bits in groups of 8, then do a lookup in a table. While not optimal, this is a good tradeoff; long integer #lowBit always invokes us with bytes." "2r00101000 lowBit >>> 4" "2r-00101000 lowBit >>> 4" | n result lastByte | n := self. n = 0 ifTrue: [ ^ 0 ]. result := 0. [(lastByte := n bitAnd: 16rFF) = 0] whileTrue: [ result := result + 8. n := n bitShift: -8 ]. "The low bits table can be obtained with: ((1 to: 8) inject: #[1] into: [:lowBits :rank | (lowBits copy at: 1 put: lowBits first + 1; yourself) , lowBits]) allButFirst." ^result + ( #[1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 5 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 6 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 5 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 7 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 5 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 6 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 5 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 8 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 5 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 6 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 5 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 7 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 5 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 6 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 5 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1] at: lastByte)bat: anInteger "Answer my element at index anInteger. at: is used by a knowledgeable client to access an existing element." "((OrderedCollection new add: 34; yourself) at: 1) >>> 34" "(#(40 41 42) asOrderedCollection at: 1) >>> 40" "(#(40 41 42) asOrderedCollection at: 2) >>> 41" "(#(40 41 42) asOrderedCollection at: 3) >>> 42" | index | anInteger < 1 ifTrue: [ self errorSubscriptBounds: anInteger ]. (index := anInteger + firstIndex - 1) > lastIndex ifTrue: [ self errorSubscriptBounds: anInteger ]. ^ array at: indexxor: alternativeBlock "Nonevaluating conjunction. Answer the opposite of the the argument, alternativeBlock; since the receiver is true." "(true xor: [true]) >>> false" "(true xor: [false]) >>> true" ^ alternativeBlock value not@{'one' -> 1. 'two' ->2} asOrderedDictionary keys first >>> 'one'(('foo*baz' match: 'foo23bazo') >>> false'1.234' asInteger >>> 1atAll: aCollection put: anObject "Put anObject at every index specified by the elements of aCollection." "({#x .#y .#z} atAll: #(1 3) put: #e; yourself) >>> #(e y e)" aCollection do: [:index | self at: index put: anObject]. ^ anObjectE(#(a b c d e) indexOfAnyOf: #(x y c) startingAt: 4 ifAbsent: 7) >>> 70602116rA54-3 odd >>> true73555*ifFalse: falseAlternativeBlock ifTrue: trueAlternativeBlock "Same as ifTrue:ifFalse:." "(true ifFalse: [ 'That is false!' ] ifTrue: [ 'That is true!' ]) >>> 'That is true!'" "(false ifFalse: [ 'That is false!' ] ifTrue: [ 'That is true!' ]) >>> 'That is false!'" self subclassResponsibilityTIterate over all the pairs of the receiver and apply the binaryBlock to each pair. !(3.1479 roundUpTo: 0.01) >>> 3.15142018(RuntimeSyntaxError signal: 'false error'&(#(a b c d) allButFirst: 2) >>> #(c d)40e0includesAll: aCollection "Answer whether all the elements of aCollection are in the receiver." "(#(10 20 30) includesAll: #(30 20)) >>> true" "(#(10 20 30) includesAll: #(30 40)) >>> false" "(#(10 20 30) includesAll: #()) >>> true" "('hello' includesAll: 'ho') >>> true" "('hello' includesAll: 'hop') >>> false" aCollection do: [:elem | (self includes: elem) ifFalse: [^ false]]. ^ true1"100000000 decimalDigitLength >>> 922ABA10012cbe)Fold the result of the receiver into aBlock. The argument aBlock must take two or more arguments. It applies the argument, binaryBlock cumulatively to the elements of the receiver. For sequenceable collections the elements will be used in order, for unordered collections the order is unspecified.0033w& aCollection "Alias for intersection:" "#(1 2 3 4) & #(1 2 4 6 7) >>> #(1 2 4)" ^ self intersection: aCollection3pppp A pp A pp A 0 :B :B :B | | T t T | t s t s t 0810vector0102105XX XX n XXXX n X Xelvis This method return the average of the collection if it is not empty. In the other case, it return the value of the block. It means the user the user of this method decide of the return value.(1923 roundUpTo: 10) >>> 1930gloops#Tests-unix-64-ReleaseTests-Test.xmlSHIFT_L6512deAnswer the receiver's element immediately before target. Raise an error if target is not an element of the receiver, or if there are no elements before it (i.e. it is the first element).20020and: alternativeBlock "Nonevaluating conjunction -- answer the value of alternativeBlock since the receiver is true." "(true and: [ false ]) >>> false" "(true and: [ true ]) >>> true" ^ alternativeBlock value"('*baz*' match: 'mobazo') >>> truea"[ :thisContext | thisContext + 1 ]420def/(#(1 2 3) reduceRight: [ :a :b | a - b ]) >>> 2a11130 X X X1aLOLbar1043ecSame aspect ratio23025JResults are not defined for base smaller than 2 and non-integer arguments.*0222FFF9999AAAAAAABBBBBBBBCCCCCCDAAAEA9220DReturn whether the receiver is one of these characters: $ and euro\Format the receiver by interpolating elements from collection, as in the following examples:OReturn all the elements that appear in self or in aCollection. Alias of union:e2120 #[ 1 256 2 ], 2Answer the index of the receiver's first element, such that that element equals the first element of sub, and the next elements equal the rest of the elements of sub. Begin the search at element start of the receiver. If no such match is found, answer the result of evaluating argument, exceptionBlock.2014bbeginsWith: aSequenceableCollection "Answer true if the receiver starts with the argument collection" "(#(1 2 3 4 5) beginsWith: #()) >>> true" "(#(1 2 3) beginsWith: #(1 2 3 4 5)) >>> false" "(#(1 2 3 4 5) beginsWith: #(0 1 2)) >>> false" "(#(1 2 3 4 5) beginsWith: #(1 2 3)) >>> true" aSequenceableCollection ifEmpty: [ ^true ]. self size < aSequenceableCollection size ifTrue: [^false]. aSequenceableCollection withIndexDo: [:each :index | (self at: index) ~= each ifTrue: [^false]]. ^true42X u101foo < bar ; baz. > 62113333333(#(10 20) asSet copyWith: 30) >>> #(10 20 30) asSetA1222xb33.1479TheRollingStones4%Character end isControlOther >>> true'Return whether the receiver is a digit.I(#('do' 'la' 'si' 'do' 'la') copyWithoutDuplicates) >>> #('la' 'do' 'si')700 :BBBBB | bbbbb s n 0 [:a| ||a]XsXround: numberOfWishedDecimal "Round the decimal part of the receiver to be limited to the number of wished decimal. Only leave a fixed amount of decimal" "(10.12345 round: 2) >>> 10.12 " ^(self asFraction round: numberOfWishedDecimal) asFloat$Here123should%Be6TheName6OfTheMethod01-101xAnswer a copy of the receiver containing all but the first n elements. Raise an error if there are not enough elements.44sAnswer whether the receiver sorts equally as aString. The collation order is simple ascii (with case differences).l(#(1 3 5 7 11 15 23) findBinary: [ :arg | 24 - arg ] ifNone: [:a :b | 'over ', a printString]) >>> 'over 23'G(#(1 + 3 - 5) reduceLeft: [ :a :op :b | a perform: op with: b ]) >>> -1$(#(a b a d e) lastIndexOf: #a) >>> 351SprintStringHex "$A printStringHex >>> '41'" ^ self asInteger printStringBase: 16105Answer a comparison code telling how the receiver sorts relative to aString: 1 - before 2 - equal 3 - after. The collation sequence is ascii with case differences ignored. To get the effect of a <= b, but ignoring case, use (a compare: b) <= 2.4(Array streamContents: [:stream | #(10 20 30) paddedWith: #(40 50 60) do: [:first :second | stream nextPut: (first + second)]]) >>> #(50 70 90) uEvaluating disjunction (OR). Evaluate the argument. Then answer true if either the receiver or the argument is true.1201S(#(1 2 3 4) overlappingPairsCollect: [:first :second| first + second]) >>> #(3 5 7)04KNonevaluating conjunction -- answer with false since the receiver is false.21010000010000200003055555555555556676869666CBBBDAAAE1(1 to:10 by:2) size >>> 511JisConnectorPunctuation "Return whether the receiver is one of these characters: _" "$_ isConnectorPunctuation >>> true" "$( isConnectorPunctuation >>> false" "$) isConnectorPunctuation >>> false" "$> isConnectorPunctuation >>> false" "$} isConnectorPunctuation >>> false" ^ self characterSet isConnectorPunctuation: self1125afoodezortorfoo3zort023Pharo#$> isConnectorPunctuation >>> false0"2 ** (1/12) >>> 1.05946309435929532032#(1 -3 5 1) argmax >>> 332.03100>(#(1 2 3 4) joinUsing: ', ' last: ' and ') >>> '1, 2, 3 and 4'1Invalid input/output !between: #(0 1)1;fooxEvaluate aBlock with each of the receiver's elements as the argument. Answer the number of elements that answered true.m(#(10 20 10 10) asOrderedCollection removeAllFoundIn: #(10 20 30); yourself) >>> #(10 10) asOrderedCollectionBEnumerate the receiver with all the keys (aka indices) and values.10)([:x | x + 1] cull: 13 cull: 12) >>> 14 /(2.567 printShowingDecimalPlaces: 2) >>> '2.57'9(Color red asColorref) >>> 255kCreate a scanner stream of program tokens on the argument. Users can then use stream API to consume tokens.920<30 self := selfPharo is really super cool32[ | b ]1652 4 + 3 >>> 7highBit "Answer the index of the high order bit of the receiver, or zero if the receiver is zero. Raise an error if the receiver is negative, since negative integers are defined to have an infinite number of leading 1's in 2's-complement arithmetic. Use >>highBitOfMagnitude if you want to get the highest bit of the magnitude." "2r00101000 highBit >>> 6" "0 highBit >>> 0" self < 0 ifTrue: [^ self error: 'highBit is not defined for negative integers']. ^ self highBitOfPositiveReceiver(((100@200) min: (330@400)) >>> (100@200)b61or: alternativeBlock "Nonevaluating disjunction -- answer value of alternativeBlock." "(false or: [true]) >>> true" "(false or: [3]) >>> 3" ^alternativeBlock value6Answer whether the receiver contains any elements, or is nil. Useful in numerous situations where one wishes the same reaction to an empty collection or to nil2010001110?((1 to: 10) collect: [:i| i gcd: 6]) >>> #(1 2 3 2 1 6 1 2 3 2)2*('salkjsdlkgfeesd' findString: 'sd') >>> 6e1Xnot "Negation--answer false since the receiver is true." "true not >>> false" ^false3$a isClosePunctuation >>> false9XXXXXXXXXXXXXXXXXX6:Helper to tranform any `do:`-like method into a generator.Five is {five}. #[ 1 ) 2 ]10042 0000111121022.2e'h: hue s: saturation v: brightness "Create a color with the given hue, saturation, and brightness. Hue is given as the angle in degrees of the color on the color circle where red is zero degrees. Saturation and brightness are numbers in [0.0..1.0] where larger values are more saturated or brighter colors. For example, (Color h: 0 s: 1 v: 1) is pure red." "Note: By convention, brightness is abbreviated 'v' to to avoid confusion with blue." "(Color h: 0 s: 1 v: 1) >>> (Color r: 1 g: 0 b:0)" ^ self h: hue s: saturation v: brightness alpha: 1.066$$ isCurrencySymbol >>> true1031>> #c" ^ self after: target ifAbsent: [self errorNotFound: target]-4-Optimized version of Collection>>#thenReject:1storeStringBase: base length: minimum padded: zeroFlag "(10 storeStringBase: 16 length: 6 padded: true) >>> '16r00A'" ^ String streamContents: [:s| self storeOn: s base: base length: minimum padded: zeroFlag ]1000130.8abctwolo6dz2lastIndexOf: anElement ifAbsent: exceptionBlock "Answer the index of the last occurrence of anElement within the receiver. If the receiver does not contain anElement, answer the result of evaluating the argument, exceptionBlock." "(#(a b a d a) lastIndexOf: #a ifAbsent: 7) >>> 5" "(#(a b a d e) lastIndexOf: #c ifAbsent: 7) >>> 7" ^self lastIndexOf: anElement startingAt: self size ifAbsent: exceptionBlockoEnumerate all elements in the receiver. Execute aBlock for those elements that are not equal to the given item'{1. 2} asSet = {2. 1} asSet >>> true02222221V{'two' ->2. 'one' -> 1} asDictionary >>> (Dictionary with: 'one' -> 1 with: 'two' ->2)Q('fear is the little death that the.' charactersExactlyMatching: 'fear is') >>> 72FTests-unix-64-Calypso-SystemPlugins-Deprecation-Queries-Tests-Test.xml1c2Evaluate aBlock with each of the receiver's elements as the argument. If some element evaluates aBlock to true, then cull this element into foundBlock and answer the result of this evaluation. If none evaluate to true, then evaluate exceptionBlock.00102000533334400667Answer the element after target. Answer the result of evaluation the exceptionBlock if target is not in the receiver, or if there are no elements after it.tcollect: aBlock from: firstIndex to: lastIndex "Refer to the comment in Collection|collect:." "(#(1 2 3 4) collect: [:each | each + 10] from: 2 to: 3) >>> #(12 13) " | size result j | size := lastIndex - firstIndex + 1. result := self species new: size. j := firstIndex. 1 to: size do: [:i | result at: i put: (aBlock value: (self at: j)). j := j + 1]. ^ result10:(100000000 printShowingDecimalPlaces: 1) >>> '100000000.0'-2 reciprocal >>> (-1/2)320vector412412101E1d20 test &A clear but rather long-winded summaryreverseWithIndexDo: elementAndIndexBlock "Just like reverseWith:do: except that the iteration index supplies the second argument to the block." "(Array streamContents: [:stream | #(10 20 30) reverseWithIndexDo: [:each :index | stream nextPut: each + index]]) >>> #(33 22 11)" self size to: 1 by: -1 do: [:index | elementAndIndexBlock value: (self at: index) value: index]00vector01 ; foo 'ziggie' lastSpacePosition >>> 0Eformat: collection "Format the receiver by interpolating elements from collection, as in the following examples:" "('Five is {1}.' format: { 1 + 4}) >>> 'Five is 5.'" "('Five is {five}.' format: (Dictionary with: #five -> 5)) >>> 'Five is 5.'" "('In {1} you can escape \{ by prefixing it with \\' format: {'strings'}) >>> 'In strings you can escape { by prefixing it with \' " "('In \{1\} you can escape \{ by prefixing it with \\' format: {'strings'}) >>> 'In {1} you can escape { by prefixing it with \' " ^ self species new: self size streamContents: [ :result | | stream | stream := self readStream. [ stream atEnd ] whileFalse: [ | currentChar | (currentChar := stream next) == ${ ifTrue: [ | expression index | expression := stream upTo: $}. index := Integer readFrom: expression ifFail: [ expression ]. result nextPutAll: (collection at: index) asString ] ifFalse: [ currentChar == $\ ifTrue: [ stream atEnd ifFalse: [ result nextPut: stream next ] ] ifFalse: [ result nextPut: currentChar ] ] ] ]'abc' startsWithDigit >>> false33$) isClosePunctuation >>> true050-2C(DateAndTime fromString: '2004-02-29T13:33:00+02:00') minute >>> 33 hex: aFloat "Return an hexadecimal two-digits string between 00 and FF for a float between 0.0 and 1.0" "(Color hex: 0.2) >>> '33'" | str | str := (aFloat * 255) asInteger printStringHex asLowercase. ^ str size = 1 ifTrue: [ '0' , str ] ifFalse: [ str ]-3100000000000000000oops2abd<<<<<(1/3 round: 2) >>> (33/100) 1Look at Collection>>reduce: for a related method.1111 10000000000016('salkjsdlkgfee' findString: 'ee'startingAt: 3) >>> 12FcopyWithoutDuplicates "Answer a copy of the receiver without any duplicated elements" "(#(2 3 4 4 5 6) copyWithoutDuplicates asSet) >>> #(2 3 4 5 6) asSet" "(#('do' 'la' 'si' 'do' 'la') copyWithoutDuplicates) >>> #('la' 'do' 'si')" "(#(#do #la #si #do #la) copyWithoutDuplicates) >>> #(#la #do #si)" ^ self asSet asArray """ ^ """ n """ EWriting '<' character: To write '<', prepend it with a percent sign.23$Tests-unix-64-Renraku-Tests-Test.xml32.4668517113662407B('abcdefgh' includesSubstring: 'DE' caseSensitive: false) >>> true10!"a" [ "b" 1 "c" . "d" 2 "e" ] "f"72super := super That is true!0 0aB(Character space join: #('Pharo' 'is' 'cool')) >>> 'Pharo is cool'Sort this array using aSortBlock. The block should take two arguments and return true if the first element should preceed the second one.0twos:Name already defined415helloO|s| (#(1 3) detect: [ :each | each even ] ifFound: [ :e | s:=e*10 ]). s >>> nilT(Dictionary newFrom: {1->#a. 2->#b. 3->#c}) >>> ({1->#a. 2->#b. 3->#c} asDictionary)3false ==> [false] >>> true10000b74 0000222222211false & false >>> false+(2 raisedTo: (1/12)) >>> 1.05946309435929531000#( ( 0 1 2 ) )111xz3- arg "Answer a Point that is the difference of the receiver and arg." "((2@2) - (100@200)) >>> (-98@ -198)" "((2@2) - 200) >>> (-198@ -198)" arg isPoint ifTrue: [^ (x - arg x) @ (y - arg y)]. ^ arg adaptToPoint: self andSend: #-ifFalse: alternativeBlock "If the receiver is true (i.e., the condition is true), then the value is the true alternative, which is nil. Otherwise answer the result of evaluating the argument, alternativeBlock. Create an error notification if the receiver is nonBoolean. Execution does not actually reach here because the expression is compiled in-line." "(false ifFalse: [ 'This statement is false!' ]) >>> 'This statement is false!'" "(true ifFalse: [ 'This statement is false!' ]) >>> nil" self subclassResponsibility,remove the initial and final quote marks (single quote for string, or double quotes for comments), if present (and if matches nesting quotes). Have a look at testWithoutQuoting. If you want to remove single/double quotes not in first and last positions of the strings, have a look at copyWithout: $' -Tests-unix-64-UndefinedClasses-Tests-Test.xml3 and "(1 to: 5 by: 3) asArray >>> {1. 4}10 (10 'hello')a23154164foo1XXnX2Return a new empty collection based on the speciesc33ath is is29 a stRI41"{3@5. 7@ -4} average >>> (5@(1/2))-' test ' withSeparatorsCompacted >>> ' test '59(#(1 2 3) collect: [:each | each + 10]) >>> #(11 12 13) 4.0_In the following example, the group `3->#(34)` is filtered out because there is not 2 elements.!(13 beBetween: 12 and: 20) >>> 13false & true >>> falseaD(RunArray newFrom: {1. $a. $a. 3}) >>> ({1. $a. $a. 3} as: RunArray)#(#(10 20 30) includes: 20) >>> true10def5!#(a b c d e f g h i) ninth >>> #i fred the bear #foo : 1003.1450Ab cd ef Ab cdM(RubTextEditor new surroundString: 'a''b' withCharacter: $') >>> '''a''''b'''1110a31:(#(a b c d e) indexOf: #c startingAt: 2 ifAbsent: 7) >>> 366-1200nnn.n0 | T t | t nn. t 0#( 1 two #( 3 ) )#(#(a b c d e) last: 3) >>> #(c d e)yAnswer the value of alternativeBlock. Execution does not actually reach here because the expression is compiled in-line.19299=If the receiver is not nil, pass it as argument to the block.GcontractTo: smallSize "return myself or a copy shortened by ellipsis to smallSize" "('abcd' contractTo: 10) >>> 'abcd'" "('Pharo is really super cool' contractTo: 10) >>> 'Phar...ool'" "('A clear but rather long-winded summary' contractTo: 18) >>> 'A clear ...summary'" | leftSize | self size <= smallSize ifTrue: [^ self]. "short enough" smallSize < 5 ifTrue: [^ self copyFrom: 1 to: smallSize]. "First N characters" leftSize := smallSize-2//2. ^ self copyReplaceFrom: leftSize+1 "First N/2 ... last N/2" to: self size - (smallSize - leftSize - 3) with: '...'5 0:00:00:011?(#(1 2 3) with: #(4 5 6) collect: [:a :b | a + b]) >>> #(5 7 9)350 1100000442060225 953.67 MB3529134"00010020030004454647444A999B888C00Return an instantiated color from parm. If parm is already a color, return it, else return the result of my performing it if it's a symbol or, if it is a list, it can either be an array of three numbers, which will be interpreted as RGB values, or a list of symbols, the first of which is sent to me and then the others of which are in turn sent to the prior result, thus allowing entries of the form #(blue darker). Else just return the thing0310// aNumber "Integer quotient defined by division with truncation toward negative infinity. \\ answers the remainder from this division." "9//4 >>> 2" "-9//4 >>> -3" "-0.9//0.4 >>> -3" ^(self / aNumber) floor4( #(1 #(2 3) #(4 #(5))) flattened ) >>> #(1 2 3 4 5)1lastSpacePosition "Answer the character position of the final space or other separator character in the receiver, and 0 if none" "'fred the bear' lastSpacePosition >>> 9" "'ziggie' lastSpacePosition >>> 0" "'elvis ' lastSpacePosition >>> 6" "'elvis ' lastSpacePosition >>> 7" "'' lastSpacePosition >>> 0" self size to: 1 by: -1 do: [:i | ((self at: i) isSeparator) ifTrue: [^ i]]. ^ 0032768 == (1 bitShift: 15)2&(AsciiCharset toLowercase: $A) >>> $a.1 kkk XX kkk1121100def-31@(#(10 20 30) inject: 0 into: [ :sum :each | sum + each ]) >>> 60100.0e2 reciprocal >>> (1/2)3,"a" 1 "b" max: "c" 2 "d" + "e" 3 "f" abs "g"File8(0@10 isInsideRectangle: (0@0 corner: 100@100)) >>> true3intersection: aCollection "Answer the set theoretic intersection of two collections. Optimized version for Sets where no intermediate Set is necessary" "(#(1 2 3 4) asSet intersection: #(3 4 5) asSet) >>> #(3 4) asSet" "(#(1 2 3 4) asSet intersection: #() asSet) >>> Set new" "( #() asSet intersection: #(1 2 3 4) asSet) >>> Set new" | outputSet | outputSet := self class new. aCollection do: [ :each | (self includes: each) ifTrue: [ outputSet add: each ] ]. ^ outputSetu u. 0 X X X XX X 0. X X103aro 10r89abcd0vector0273displayStringOn:foo)(1.2 arcTan: -1.5) >>> 2.466851711366240722225511(nil)(String streamContents: [:s | [:c | c isSeparator ] split: 'Pharo is cool' indicesDo: [ :start :end | s << 's:' << start asString << ' ' << 'e:' << end asString << ' ' ]]) >>> 's:1 e:5 s:7 e:8 s:10 e:13 '11-66173Class structural inspection - Class/Metaclass shift2(Return whether the receiver is a letter.Faster than the superclass implementation when you hold many instances of the same value (which you probably do, otherwise you wouldn't be using a Bag).'('hello world' occurrencesOf: 10) >>> 0fred41d foo10galike: aString "Answer some indication of how alike the receiver is to the argument, 0 is no match, twice aString size is best score (but see example with 7). Case is ignored. This method is used to help find mistyped variable names in methods." "('abc' alike: 'abc') >>> 7." "('action' alike: 'actions') >>> 7." "('action' alike: 'caption') >>> 5." "('action' alike: 'name') >>> 0." | i j k minSize bonus | minSize := (j := self size) min: (k := aString size). bonus := (j - k) abs < 2 ifTrue: [ 1 ] ifFalse: [ 0 ]. i := 1. [(i <= minSize) and: [((self at: i) asInteger bitAnd: 16rDF) = ((aString at: i) asciiValue bitAnd: 16rDF)]] whileTrue: [ i := i + 1 ]. [(j > 0) and: [(k > 0) and: [((self at: j) asInteger bitAnd: 16rDF) = ((aString at: k) asciiValue bitAnd: 16rDF)]]] whileTrue: [ j := j - 1. k := k - 1. ]. ^ i - 1 + self size - j + bonus1.01Since the condition is false, answer the value of the false alternative, which is nil. Execution does not actually reach here because the expression is compiled in-line.1&(Color r: 1 g: 1 b: 1) >>> Color white/Tests-unix-64-Spec2-Code-Backend-Tests-Test.xml12004d18&('foo*baz' match: 'foo23baz') >>> true221''fred the bear' lastSpacePosition >>> 9pharofooa22Not valid for negative integersc0vector0>printOn: aStream delimiter: delimString "Print elements on a stream separated with a delimiter String like: 'a, b, c'" "(String streamContents: [:s| { 10. 'hello'. $x } printOn: s delimiter: ', ']) >>> '10, ''hello'', $x'" self do: [:elem | aStream print: elem] separatedBy: [aStream nextPutAll: delimString]133102s:%(false and: [Error signal]) >>> false4007a100000000 "unfinished ('*baz' match: 'mobaz') >>> true4(0@5) guarded >>> (1@5)10n sss XColor red hsvSaturation >>> 1.0gReturns whether the receiver is composed entirely of separators i.e., a space, tab, lf, cr, and newPage"Guard for know cases (0,1,2,error)1.928390123490234817factorial "Answer the factorial of the receiver." "The factorial on n is defined as: n * (n-1)*(n-2)*... while n>0. Factorial of 0 is 1. We also know Factorial of 1 and 2 are themselves. This implementation uses a 2-partition algorithm. For a recursive (but slower) implementation see 'slowFactorial' Without verbose detail: If'm an even number,some optimization can be applied: Instead of doing all multiplication we can halving the number of multiplication regrouping terms, so: n*(n-1)*(n-2)*....*3*2*1 can be rearranged as: (n*1)*((n-1)*2)*((n-2)*3)*... And the use the fact n is even to rewrite in a more efficient way. If I'm an odd number then compute for n-1 and multily by n. " "Example of usages:" "0 factorial >>> 1" "1 factorial >>> 1" "2 factorial >>> 2" "3 factorial >>> 6" "4 factorial >>> 24" "5 factorial >>> 120" "6 factorial >>> 720" | nex nexnext acc | "Guard for know cases (0,1,2,error)" self < 3 ifTrue: [ ^ self < 0 ifTrue: [ self error: 'Not valid for negative integers' ] ifFalse: [ self > 0 ifTrue: [ self ] ifFalse: [ 1 ] ] ]. acc := 2. nex := 2. nexnext := 10. self // 2 - 1 timesRepeat: [ nex := nex + nexnext. nexnext := nexnext + 8. acc := acc * nex ]. self odd ifTrue: [ acc := acc * self ]. ^ acc201ab313asLowercase "Answer a String made up from the receiver whose characters are all lowercase." "'PhaRo' asLowercase >>> 'pharo'" "'' asLowercase >>> ''" "' ' asLowercase >>> ' '" ^ self copy asString translateToLowercase1e1e1x2b201'#foo:bar: keywords >>> #('foo:' 'bar:')"('action' alike: 'actions') >>> 7.three2""" n """. """ n """28Color red hue >>> 0.04#(5 -3.7 0) sign >>> #(1 -1 0)3(2 raisedTo: -1) >>> (1/2)Example of usages:712<<<<0-1047Special case for fraction powerX n s n12 'abcd' asFourCode >>> -51364572421012<0000224455655597777855CCDDEDDDHFFFFGGDDICCBBBBBBAAAJ4433333351#foo keywordsStrict >>> #() 'def' > 'abc' >>> true2one73 16r400000001120 That is true!+Tests-unix-64-System-History-Tests-Test.xmlUnused variablezz| a b | 11. 2kReturn the index'th element of me if possible. Return the first or last element if index is out of bounds.'abc' isOctetString >>> true10 hexString >>> '16rA'1#(1 2 3) isSorted >>> true)((4 to: 9) anySatisfy: #isPrime) >>> true1023>Nonevaluating disjunction -- answer value of alternativeBlock."#(a b c d e f g h ) eighth >>> #h10*Note that key and value can be ANY object. Hello, World!10 x isSymbol includes:]Answer the seventh element of the receiver. Raise an error if there are not enough elements. '}' expected (10 printStringBase: 16) >>> 'A'400x+Tests-unix-64-Refactoring-UI-Tests-Test.xml foo z#(a b c d) middle >>> #c#$( isConnectorPunctuation >>> falseAnswer the index of the first substring within the receiver, starting at start. If the receiver does not contain substring, answer 0.y100852c3#(1 2 3 0) isSorted >>> false236DE5Evaluate the given block with the receiver as argument, answering its value unless the receiver is empty, in which case answer the receiver.+Character backspace isControlOther >>> true(1 digitAt: 2 base: 10) >>> 0 a := 10. ^ a1527sAnswer a Point that is the receiver's x and y ceiling. Answer the receiver if its coordinates are already integral.192310.12"101@(1000 * 1000 * 1000) humanReadableByteSizeString >>> '953.67 MB'4#'abc' = 'abc' asWideString >>> true:Answer whether anObject is one of the receiver's elements.W(false ifFalse: [ 'That is false!' ] ifTrue: [ 'That is true!' ]) >>> 'That is false!'1a33011\Return element at indexFromEnd from the last position. atLast: 1, returns the last elementLadaptToCollection: rcvr andSend: selector "If I am involved in arithmetic with another Collection, return a Collection of the results of each element combined with the scalar in that expression. Is used to implement Collection>>+, Collection>>-, etc." "(#(10 20 30) adaptToCollection: #(0 1 2) andSend: #@) >>> {(0@10). (1@20). (2@30)}" (rcvr isSequenceable and: [ self isSequenceable ]) ifFalse: [self error: 'Only sequenceable collections may be combined arithmetically']. ^ rcvr with: self collect: [:rcvrElement :myElement | rcvrElement perform: selector with: myElement]0000011111033555554446Answer the index of the last occurrence of anElement within the receiver. If the receiver does not contain anElement, answer the result of evaluating the argument, exceptionBlock.10?(Context tallyInstructions: [3.14159 printString]) size >>> 120)Tests-unix-64-OpalCompiler-Tests-Test.xml1def1*baz'Tests-unix-64-CodeImport-Tests-Test.xml8((OrderedCollection new add: 34; yourself) at: 1) >>> 34192Answer whether the receiver contains any elements. 953.67 MBdJust like reverseWith:do: except that the iteration index supplies the second argument to the block.10.1234570X({ 1->2. 3->4 } as: Dictionary) >>> (Dictionary new at: 1 put: 2; at: 3 put:4; yourself)/foo "a" < "b" bar: "c" 1 "d" z: "e" 2 "f" > "g">> 1" "1 slowFactorial >>> 1" "2 slowFactorial >>> 2" "3 slowFactorial >>> 6" "4 slowFactorial >>> 24" "5 slowFactorial >>> 120" "6 slowFactorial >>> 720" self > 0 ifTrue: [ ^ self * (self - 1) slowFactorial ]. self = 0 ifTrue: [ ^ 1 ]. self error: 'Not valid for negative integers'aBcf('test te string' copyReplaceAll: 'te' with: 'longone' asTokens: false) >>> 'longonest longone string'3y$(#(10 20 30) includes: 21) >>> false111(1)(2)9([:x | x + 12] cull: 3)>>> 15isDigit "Return whether the receiver is a digit." "$1 isDigit >>> true" "$0 isDigit >>> true" ^ self characterSet isDigit: self=(#(1 3 5 7 11 15 23) findBinary: [ :arg | 11 - arg ]) >>> 11 +((100@200) translateBy: 5@10) >>> (105@210)10RReturn the metaclass of the couple class/metaclass. Useful to avoid explicit test.12--junit-xml-output200ppp < <<<>> 2rasCommaStringAnd "Return collection printed as 'a, b and c' " "#( 'a' 'b' 'c') asCommaStringAnd >>> 'a, b and c'" "#('a') asCommaStringAnd >>> 'a'" "#() asCommaStringAnd >>> ''" "'foo' asCommaStringAnd >>> 'f, o and o'" "(10 to: 25 by: 5) asCommaStringAnd >>> '10, 15, 20 and 25'" ^String streamContents: [:s | self asStringOn: s delimiter: ', ' last: ' and ']L writes the N-th argument using #printString, but without trancating it.abc42-('pharo' endsWith: 'project-pharo') >>> falseG({#a. #b. #c. #d. #e} from: 3 to: 4 put: #x; yourself) >>> #(a b x x e)LAdd a new object at the end of the collection, and returns the object itself10named: aString "Returns the instance of myself having aString as name." "(KeyboardKey named: 'SHIFT_L') >>> (KeyboardKey value: 65505)" ^ KeyNameTable at: aString1/#( #':=' aa: #= #':=' #= bb: #'==' #cc: #'==' )0.91984359726295211abcde(#(1 3 5 7 11 15 23) findBinary: [ :arg | 11 - arg ] do: [ :found | found ] ifNone: [ :a :b | 'between: ', {a. b} printString ]) >>> 116Evaluate aBlock with each of the receiver's elements as the argument. Collect into a new collection like the receiver only those elements for which aBlock evaluates to false. Answer the new collection.:. :a between: "fear is the little death that the.33100L(10 to: 25 by: 5) asOrderedCollection >>> #(10 15 20 25) asOrderedCollectionAnswer a new collection of the same species as the receiver with elements being collections (of the receiver species) containing those elements of the receiver for which the given block consecutively evaluates to the same object.3111120044444666666A888895#foo: keywords >>> #('foo:') }211 | | . :a | 15 Pharo is cool101618Return the sum (+) of the elements held in the receiver.1.0410 boy!2('Five is {1}.' format: { 1 + 4}) >>> 'Five is 5.'5world3ifFalse: falseAlternativeBlock ifTrue: trueAlternativeBlock "Answer the value of trueAlternativeBlock. Execution does not actually reach here because the expression is compiled in-line." "(true ifFalse: [ 'That is false!' ] ifTrue: [ 'That is true!' ]) >>> 'That is true!'" ^trueAlternativeBlock value1foo: a bar: a ^ a(#('We' 'love' 'pharo!') asOrderedCollection withIndexSelect: [:value :index | value size - 1 <= index]) >>> (OrderedCollection with: 'We')1954001aeioulongone72ymax: aPoint "Answer the lower right corner of the rectangle uniquely defined by the receiver and the argument, aPoint." "((100@200) max: (330@400)) >>> (330@400)" "((100@200) max: (30@400)) >>> (100@400)" ^ (x max: aPoint x) @ (y max: aPoint y)70 foo||bar||2associationClass "Return the class of STON associations, Association, a system wide constant" "(STON fromString: '#foo : 100') class >>> STON associationClass" ^ Associationreciprocal "Returns the reciprocal of self. In case self is 0 the / signals ZeroDivide" "1/2 reciprocal >>> 2" "2 reciprocal >>> (1/2)" "1.25 reciprocal >>> 0.8" "-2 reciprocal >>> (-1/2)" ^1 / selfpharo ab ab ac ded1(true xor: [true]) >>> false11...>> false" "(#(2 4) allSatisfy: [ :each | each even ]) >>> true" "('hello' allSatisfy: #isLetter) >>> true" "('hello!' allSatisfy: #isLetter) >>> false" "((3 to: 8 by: 2) allSatisfy: #isPrime) >>> true" "((3 to: 9 by: 2) allSatisfy: #isPrime) >>> false" "(#() allSatisfy: [false]) >>> true" self do: [ :each | (aBlock value: each) ifFalse: [ ^ false ] ]. ^ trueabc11114#( #( ) #'.' #':' #';' #'[' #']' #'{' #'}' #'^' #a )W(false ifFalse: [ 'That is false!' ] ifTrue: [ 'That is true!' ]) >>> 'That is false!' 0010022230test longone string>> nil342shuffledBy: aRandom "Durstenfeld's version of the Fisher-Yates shuffle" "({1. 2. 3. 4. 5} shuffleBy: (Random seed: 42)) >>> #(1 2 5 4 3)" ^ self copy shuffleBy: aRandom-200120-43 [1 , 2 , 3]-2@(STON fromStringWithComments: 'Point[1,/*comment*/2]') >>> (1@2)/foo/gloops.taz2('Hello' detect: #isLowercase ifNone: [$X]) >>> $easa28success7word before index1%OrderedCollection new capacity >>> 10000002244454448889888B8877777777DDCCCE4433333333F-('foo*baz*zort' match: 'foobazort') >>> falseasInteger "Return the integer present in the receiver, or nil. In case of float, returns the integer part." "'1' asInteger >>> 1" "'-1' asInteger >>> -1" "'10' asInteger >>> 10" "'a' asInteger >>> nil" "'1.234' asInteger >>> 1" ^self asSignedInteger0 ')' expected10((Color white diff: Color black ) >>> 1.02111digitAt: anExponent base: base "Return number that represents digit at given position." "(42 digitAt: 2 base: 10) >>> 4" "(42 digitAt: 1 base: 10) >>> 2" "It is always a number or zero:" "(16rFF digitAt: 1 base: 16) >>> 15" "(1 digitAt: 2 base: 10) >>> 0" "Results are not defined for base smaller than 2 and non-integer arguments." ^ self // (base raisedToInteger: anExponent - 1) \\ basedInvalid input/output !31003| T | 0 ^ t 0. t nn1Tests-unix-64-DrTests-TestCoverage-Tests-Test.xml11RReturns a string representation of the receiver as hexadecimal, prefixed with 16r.10 beginsWith: prefix "Answer whether the receiver begins with the given prefix string. The comparison is case-sensitive." "IMPLEMENTATION NOTE: following algorithm is optimized in primitive only in case self and prefix are bytes like. Otherwise, if self is wide, then super outperforms, Otherwise, if prefix is wide, primitive is not correct" "('pharo' beginsWith: '') >>> true" "('pharo' beginsWith: 'pharo-project') >>> false" "('pharo' beginsWith: 'phuro') >>> false" "('pharo' beginsWith: 'pha') >>> true" prefix ifEmpty: [ ^true ]. (self class isBytes and: [ prefix class isBytes ]) ifFalse: [^super beginsWith: prefix]. self size < prefix size ifTrue: [^ false]. ^ (self findSubstring: prefix in: self startingAt: 1 matchTable: CaseSensitiveOrder) = 13Tests-unix-64-NewTools-RewriterTools-Tests-Test.xml10!0000001110000002220446665557773308932213a$sideOf: otherPoint "Returns #left, #right or #center if the otherPoint lies to the left, right or on the line given by the vector from 0@0 to self" "((0@0) sideOf: (100@100)) >>> #center" | side | side := (self crossProduct: otherPoint) sign. ^ { #right . #center . #left } at: side + 27orange"pppp AAAAAAAAAAA ^ aaaaaaaaaaa s n10330;;255MAnswer the next multiple of aNumber toward zero that is nearest the receiver.3indexOf: aCharacter startingAt: start "Return the index of the argument in the receiver, only elements after the start of the element are considered zero if not present." "('abcdf abcedf' indexOf: $a startingAt: 4) >>> 7" "('abddf bcdef' indexOf: $a startingAt: 100 ) >>> 0" (aCharacter isCharacter) ifFalse: [^ 0]. ^ self class indexOfAscii: aCharacter asciiValue inString: self startingAt: start10221asSortedCollection: aSortBlock "Answer a SortedCollection whose elements are the elements of the receiver. The sort order is defined by the argument, aSortBlock. Note that it is better to use #sorted if you don't really need a SortedCollection, but a sorted collection!!" "('bar' asSortedCollection: [:x :y| x>y ]) asArray >>> {$r. $b. $a}." | aSortedCollection | aSortedCollection := SortedCollection new: self size. aSortedCollection sortBlock: aSortBlock. aSortedCollection addAll: self. ^ aSortedCollectionG(#('abc' 'de' 'fghi') sorted: #size ascending) >>> #('de' 'abc' 'fghi')2That is false!subtractDate: aDate "Answer the number of days between self and aDate" "((Date year: 2018 month: 9 day: 28) subtractDate: '2018-09-27') >>> 1" ^ (self start - aDate asDateAndTime) daysa2al9410EMight be compiled inline for speed, see RBMessageNode>>#isInlineIfNil(true and: [ true ]) >>> trueL('Hello, World!' select: #isLetter thenCollect: #uppercase) >>> 'HELLOWORLD'2300{endsWith: suffix "Answer whether the receiver ends with the given prefix string. The comparison is case-sensitive." "IMPLEMENTATION NOTE: following algorithm is optimized in primitive only in case self and prefix are bytes like. Otherwise, if self is wide, then super outperforms, Otherwise, if prefix is wide, primitive is not correct" "('pharo' endsWith: '') >>> true" "('pharo' endsWith: 'project-pharo') >>> false" "('pharo' endsWith: 'phuro') >>> false" "('pharo' endsWith: 'aro') >>> true" "('pharo' endsWith: 'aRo') >>> false" | requiredStart | suffix ifEmpty: [ ^ true ]. (self class isBytes and: [ suffix class isBytes ]) ifFalse: [^super endsWith: suffix]. requiredStart := self size - suffix size + 1. requiredStart <= 0 ifTrue: [ ^false ]. ^ (self findSubstring: suffix in: self startingAt: requiredStart matchTable: CaseSensitiveOrder) = requiredStart(((104 to: 120) detect: #isPrime) >>> 1073Use a proper symbol literalBAD boy!JtallyInstructions: aBlock "Count the occurrences of each bytecode during the execution of aBlock. Return a Array of associations using the byte as key and the occurrences as values sorted by the instruction opcode numeric values. This method uses the in-image bytecode interpreter to evaluate and count the instructions." "(Context tallyInstructions: [3.14159 printString]) size >>> 120" | tallies | tallies := Bag new. thisContext sender runSimulated: aBlock contextAtEachStep: [:current | tallies add: current instructionStream peekByte ]. ^tallies sortedElements;(#(1 2) detect: #even ifFound: #negated ifNone: [0]) >>> -2false | false >>> falsez W01-Welcome98abcpharomust be exactly four charactersonePerform an action specified as aBlock (with a start and end argument) to each of the indices of aSequenceableCollection that have been identified by taking the receiver as a splitter.12 <= aString "Answer whether the receiver sorts before or equal to aString. The collation order is simple ascii (with case differences)." " 'abc' <= 'def' >>> true" " 'abc' <= 'abc' >>> true" " 'def' <= 'abc' >>> false" ^ (self compare: self with: aString) <= 02(false xor: [true]) >>> trueindexOfAnyOf: aCollection ifAbsent: exceptionBlock "Answer the index of the first occurrence of any element included in aCollection within the receiver. If the receiver does not contain anElement, answer the result of evaluating the argument, exceptionBlock." "(#(a b c d e) indexOfAnyOf: #(x y c) ifAbsent: 7) >>> 3" "(#(a b c d e) indexOfAnyOf: #(x y z) ifAbsent: 7) >>> 7" ^self indexOfAnyOf: aCollection startingAt: 1 ifAbsent: exceptionBlock11third "Answer the third element of the receiver. Raise an error if there are not enough elements." "#(a b c d e f g h i) third >>> #c" ^ self at: 358diff: theOther "Returns a number between 0.0 and 1.0" "(Color red diff: Color red) >>> 0.0" "(Color white diff: Color black ) >>> 1.0" ^ ((self privateRed - theOther privateRed) abs + (self privateGreen - theOther privateGreen) abs + (self privateBlue - theOther privateBlue) abs) / 3.0 / ComponentMax;(#(1 2 3) union: #(4 5 6 2)) asSet >>> #(1 2 3 4 5 6) asSet0vector078 92 #(3 1 4 2) sorted >>> #(1 2 3 4)224&Tests-unix-64-PharoDocComment-Test.xml1 -9//4 >>> -3350112231100400556(Tests-unix-64-Roassal-UML-Tests-Test.xmlbetween: #(23 nil)66cSet the element at indexFromEnd from the last position. atLast: 1 put: obj, sets the last element [ : | a: b ]69BBB888877777777666666555555544444444DDD00000000000EEE1#( 'a' 'b' 'c') asCommaStringAnd >>> 'a, b and c'1one0330()3+surroundedBy: aString "Answer the receiver with leading and trailing aString." "('hello' surroundedBy: 'abd') >>> 'abdhelloabd'" "('hello' surroundedBy: ' abd ') >>> ' abd hello abd '" ^ self species streamContents: [ :s| s nextPutAll: aString. s nextPutAll: self. s nextPutAll: aString ]1.1. 10:00:00:00.0010000013 That is true!11Accumulate a running value associated with evaluating the argument, binaryBlock, with the current value of the argument, thisValue, and the receiver as block arguments. [ :a : | ]5wasArray "Convert an OrderedCollection into an Array." "#(a b c) asOrderedCollection asArray >>> #(a b c)" "OrderedCollection new class >>> OrderedCollection" "OrderedCollection new asArray class >>> Array" "(OrderedCollection new add: 42; add: 43; yourself) asArray >>> #(42 43)" ^ (Array new: self size) replaceFrom: 1 to: self size with: array startingAt: firstIndex23Class structural inspection - Class/Metaclass shift%Point class classSide >>> Point class53b1(-23.4567 printShowingDecimalPlaces: 0) >>> '-23'1422Return the key that will be used to add a property with the class name when an unknown class is read and the option STONReader>>#acceptUnknownClasses: is true, by default #className. Such unknown classes are returned as generic maps. XX 00 n n n 0rReturn the index of my last element for which aBlock evaluates as true. If no matching element is found, return 0Cround: numberOfWishedDecimal "Round the decimal part of the receiver to be limited to the number of wished decimal. Only leave a fixed amount of decimal." "(10.156s round: 2) >>> 10.160s3 " "(1/3.0s round: 4) >>> 0.3333s4 " ^(super round: numberOfWishedDecimal) asScaledDecimal: (scale max: numberOfWishedDecimal) 'def' >= 'def' >>> trueincludesSubstring: substring "Returns whether the receiver contains the argument." "('abcdefgh' includesSubstring: 'de') >>> true" ^ substring isEmpty or: [ (self findString: substring startingAt: 1) > 0 ]$Returns a number between 0.0 and 1.030,000011211153333411668889888B8877777777DDCCCE2342 nanoSeconds printString >>> '0:00:00:00.000000002'27b[ :a | | a b | ]11.5#>> isUnary >>> false14831#+ keywords >>> #('+')-136a[:a ::b]3isLetter "Return whether the receiver is a letter." "$a isLetter >>> true" "$ isLetter >>> true" "$A isLetter >>> true" ^ self characterSet isLetter: self2e W01-Welcome[newFromKeys: keys andValues: values "Create a dictionary from the keys and values arguments which should have the same length." "(SmallDictionary newFromKeys: #(#x #y) andValues: #(3 6)) >>> (SmallDictionary new at: #x put: 3; at: #y put: 6 ;yourself)" | dict | dict := self new. keys with: values do: [ :k :v | dict at: k put: v ]. ^ dict2(#(11 22 33) asOrderedCollection atWrap: 5) >>> 22d(#(1 1 1 10 10 10 100 100 100) groupsOf: 3 atATimeCollect: [ :x :y :z | x + y + z]) >>> #(3 30 300)"Evaluate aBlock for each of the receiver's elements (key/value associations). If any non-association is within, the error is not caught now, but later, when a key or value message is sent to it. The point of this method it to do the *right thing* on Dictionaries and related classes. 1(false or: [3]) >>> 3worldB('abcDefgh' includesSubstring: 'DE' caseSensitive: true) >>> false(Array streamContents: [:stream | #(10 20 30) reverseWithIndexDo: [:each :index | stream nextPut: each + index]]) >>> #(33 22 11)2 sorted "Return a new sequenceable collection which contains the same elements as self but its elements are sorted in ascending order using the #'<=' operator." "#(8 5 3 9) sorted >>> #(3 5 8 9)" "#(a b z d) sorted >>> #(a b d z)" ^self sorted: [ :a :b| a <= b ]Return the receiver as a string with the adequate file size identified, e.g. '50 KB'. The difference with humanReadableByteSISizeString is that the current one counts by 1024 and not 1000.%Tests-unix-64-Graphics-Tests-Test.xml0123456789ABCDEFabcdef({1. 2} asBag = {1. 2. 2} asBag >>> false1Emit overlapping pairs of my elements into aBlock0dxor: alternativeBlock "Answer the value of the alternativeBlock since the receiver is false." "(false xor: [true]) >>> true" "(false xor: [false]) >>> false" ^ alternativeBlock value0.5b410*#(1 2 3 4) unzip first asArray >>> #(1 3)102c'a'@(#(1 2 3 4) asSet intersection: #(3 4 5) asSet) >>> #(3 4) asSet14)#message asTestSelector >>> #testMessage2De100100022644445522007781-"a" [ "b" : "c" x "d" : "e" y "f" | "g" ] "h"110hello-OrderedCollection new asArray class >>> Array10000010/ """ n """ ssss """ n """ ; """ ssss """ n """ 04wisControlOther "Return whether the receiver is one of these characters: backspace, delete, escape, arrowUp, arrowLeft, arrowDown, arrowRight, pageUp, pageDown, end, home, nbsp, insert" "Character delete isControlOther >>> true" "Character backspace isControlOther >>> true" "Character space isControlOther >>> false" "Character home isControlOther >>> true" "Character pageUp isControlOther >>> true" "Character arrowDown isControlOther >>> true" "Character end isControlOther >>> true" "$) isControlOther >>> false" "$> isControlOther >>> false" "$} isControlOther >>> false" ^ self characterSet isControlOther: self0010020430bZEvaluate twoArgBlock with corresponding elements from this collection and otherCollection.12033042| TTTTT | ttttt n. ^ ttttt41aa?Create a color with the given hue, saturation, and brightness. Hue is given as the angle in degrees of the color on the color circle where red is zero degrees. Saturation and brightness are numbers in [0.0..1.0] where larger values are more saturated or brighter colors. For example, (Color h: 0 s: 1 v: 1) is pure red.10003 9 \\ 4 >>> 125702020dwat: firstKey at: secondKey ifAbsent: aZeroArgBlock "Return the object stored in the second dictionary at secondKey. The second dictionary is accessed via the key firstKey. Execute aZeroArgBlock in case one of the key is wrong." " (OrderedDictionary new at: #top at: #below1 ifAbsent: [ 1 ]) >>> 1 " ^ dictionary at: firstKey at: secondKey ifAbsent: aZeroArgBlock 17c15113032B({ 1. 2. 3 } as: Set) >>> (Set new add: 1; add:2; add:3; yourself)*6$0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ100vector0 surroundedBySingleQuotes "Answer the receiver with leading and trailing quotes." "'hello' surroundedBySingleQuotes >>> '''hello'''" "'he''llo' surroundedBySingleQuotes >>> '''he''llo'''" "' hello ' surroundedBySingleQuotes >>> ''' hello '''" ^ self surroundedBy: ($' asString) 1 + 2 + 31D(STON fromString: '{ #foo : 1 , #bar : 2 }') class >>> STON mapClassThat is false!0.01ggggggggg sssssss '''''''''''''d/((3 to: 8 by: 2) allSatisfy: #isPrime) >>> true1030eParse and materialize the STON representation in the character readStream, skipping C-style comments+Tests-unix-64-Roassal-Global-Tests-Test.xml1(#(1 5 10) findFirst: [ :each | each > 3 ]) >>> 2XXXX93Answer the index of the first occurrence of any element included in aCollection after start within the receiver. If the receiver does not contain anElement, answer zero, which is an invalid index.gPoint classSide >>> Point classe$Point class isInstanceSide >>> false13it240(Color r: 0.5 g: 0.5 b: 1) hslSaturation >>> 1.0H(#(1 + 3 - 5) reduceRight: [ :a :op :b | a perform: op with: b ]) >>> -13 factorial >>> 60010024100 9//4 >>> 2!(111/100 round: 2) >>> (111/100) 2{1}{2}(median "Return the middle element, or as close as we can get." "{1 . 2 . 3 . 4 . 5} asSortedCollection median >>> 3" | size middle | size := self size. middle := (size + 1) // 2. ^ size even ifTrue: [ ((self at: middle) + (self at: middle + 1)) / 2 ] ifFalse: [ self at: middle ](true or: [false]) >>> truedasOrderedDictionary "Answers a Dictionary based on collection of Associations." "{'one' -> 1. 'two' ->2} asOrderedDictionary keys first >>> 'one'" ^ self as: OrderedDictionary21600011110004444333500(100@200) max >>> 2001N(false ifFalse: [ 'This statement is false!' ]) >>> 'This statement is false!'p(#(65 66 67) flatCollect: [:each | { each asCharacter. each asCharacter asLowercase } ] as: String) >>> 'AaBbCc'34(#(a b c d e) identityIndexOf: #x ifAbsent: 7) >>> 7reciprocal "Answer a Point with coordinates that are the reciprocals of mine." "(100@200) reciprocal >>> ((1/100)@(1/200))" ^ x reciprocal @ y reciprocal1 a: 30hello1{{}} isEmpty >>> false [ 1ce1GTests-unix-64-Calypso-SystemPlugins-Reflectivity-Queries-Tests-Test.xml19 foo23bazoEvaluate pieceBlock with substrings of the receiver derived from cutting the receiver at points where binaryBlock answers true for adjacent elements.0.01%Tests-unix-64-OSWindow-Tests-Test.xml110 :BBBB | bbbb s n 00 ^ n 0. n. ^ n30222222 71200-2b2ddkvalueWithPossibleArgs: anArray "Execute the receiver with the correct number of arguments taken from the argument." "([:x | x + 1] valueWithPossibleArgs: #( 13 12 15)) >>> 14 " "([:x :y | x + y] valueWithPossibleArgs: #( 13 12 15)) >>> 25 " "([:x :y :z | x + y + z] valueWithPossibleArgs: #( 13 12 15)) >>> 40 " "([:x :y :z | x + y + z] valueWithPossibleArgs: #( 13 12 15)) >>> 40 " ^numArgs = 0 ifTrue: [self value] ifFalse: [self valueWithArguments: (numArgs = anArray size ifTrue: [anArray] ifFalse: [numArgs > anArray size ifTrue: [anArray, (Array new: numArgs - anArray size)] ifFalse: [anArray copyFrom: 1 to: numArgs]])]abc21201x115p 32031110Pay attention when you write an executable comment for keyword-based method: surround with parentheses your expression because, otherwise the executable comment won't work as the message is binary.20100420Tests-unix-64-NautilusRefactoring-Tests-Test.xml90a3lo1200000000211File asFile Files File's Filee1223.57101923n s n X-('abcdefgh' includesSubstring: 'de') >>> truensn""" s nssssn""" s nssssnn"""Unescape an escaped string. Assume the string has all occurrences of aCharacter are escaped. That is, they are in pairs. This method returns a copy of the string replacing all pairs of aCharacter by a single appearance of it.7Sunday60;([:x | x + 1] valueWithPossibleArgs: #( 13 12 15)) >>> 14 0('abcdf abcedf' indexOf: $a startingAt: 4) >>> 7f%(-3.1479 roundDownTo: 0.01) >>> -3.15Zat: firstKey at: secondKey "Return the object stored in the second dictionary at secondKey. The second dictionary is accessed via the key firstKey." " (Dictionary new at: #top at: #below1 put: 1; at: #top at: #below1 put: 2; at: #top at: #below1) >>> 2" ^ self at: firstKey at: secondKey ifAbsent: [self errorKeyNotFound: secondKey]980N({10. 20} asOrderedCollection addAll: {20. 30. 30. 40.}) >>> {20. 30. 30. 40.}-(#(1 2 3) beginsWith: #(1 2 3 4 5)) >>> false[:a b]22zz10WWWWW*W EW*zzzzBSort this collection into ascending order using the '<=' operator.,(#(a b c d e) indexOf: #c ifAbsent: 7) >>> 3200.5FLPositive32SmallIntegerCluster@V8,#T=3V2 1z:\&I >JMK  9U1-=68 S %49 &_4\fMn { ]12344!'>Y/~<<'0|av1:#MC  ~C**e7#k C,^!)ɫ"u ,iG# `]6; .*CO0o"鞛ƦwZ!>ކ *`R testSelector expectedFailsparametersToUse presenterspecInitializationStrategywindowbackendForTestFLFixedObjectClusterk testSelector expectedFailsparametersToUsetestingEnvironmentmodelFLFixedObjectClusterG testSelector expectedFailsFLFixedObjectCluster domainrange interpolate uninterpolateiuFLFixedObjectCluster& testSelector expectedFailsparametersToUse presenterspecInitializationStrategywindowbackendForTestFLFixedObjectCluster testSelector expectedFailstestingEnvironmentaClass anotherClassyetAnotherClassyetYetAnotherClassFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster_ testSelector expectedFailsparametersToUseFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster ) testSelector expectedFailsparametersToUsetestingEnvironmentmodelFLFixedObjectCluster$ testSelector expectedFailsparametersToUse presenterspecInitializationStrategywindowbackendForTestlayoutFLFixedObjectClusterparent properties parenthesesnamevariablestartFLFixedObjectCluster  testSelector expectedFailsivarForTestingFLFixedObjectCluster testSelector expectedFailstext candidatescontext processorstreamFLFixedObjectCluster ^ testSelector expectedFailspluginpackagepluginConfigurationFLFixedObjectCluster, testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectClusterLy testSelector expectedFailstestingEnvironmentFLFixedObjectCluster f testSelector expectedFailsparametersToUse ffiLibraryFLFixedObjectCluster  testSelector expectedFails prototypesFLFixedObjectClusterj testSelector expectedFailsparametersToUsetestingEnvironmentmodelFLFixedObjectCluster  testSelector expectedFailsclassDefinitionFLFixedObjectClusterI testSelector expectedFailsresolverFLFixedObjectCluster  testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectClusterw testSelector expectedFailsbackendForTestspotterFLFixedObjectCluster( testSelector expectedFailscoderFLFixedObjectCluster testSelector expectedFailsthemeDecoratorFLFixedObjectCluster testSelector expectedFailsclassDefinitionFLFixedObjectCluster testSelector expectedFails filesystemguidevisitedFLFixedObjectCluster testSelector expectedFailsmorphhandeventFLFixedObjectCluster  testSelector expectedFailsFLFixedObjectCluster) testSelector expectedFailstestingEnvironmentchangesworkingEnvironment changeFactoryFLFixedObjectCluster: testSelector expectedFailsparsersubjectFLFixedObjectCluster  testSelector expectedFailsparametersToUseconfigurationSelectorformatterClass contextClassFLFixedObjectCluster#J testSelector expectedFails environmentqueryresult resultItemsfoundSelectorsFLFixedObjectClusterQ testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClassFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster6 testSelector expectedFails slotDisplayFLFixedObjectCluster| testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFails newBuilder originClass usedTrait superClassFLFixedObjectCluster testSelector expectedFailsFLFixedObjectClusterC testSelector expectedFailsnonIdentityOrderedAssociationsidentityOrderedAssociationsFLFixedObjectCluster testSelector expectedFailsinspectionClass presenterFLFixedObjectCluster  testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClassFLFixedObjectClusterx testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsplayerFLFixedObjectCluster#Cv dictionary orderedKeysFLFixedObjectCluster> testSelector expectedFailsFLFixedObjectClusterF testSelector expectedFailsbuilderFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster  testSelector expectedFailscountercounter2nodenode2FLFixedObjectCluster#I testSelector expectedFails environmentqueryresult resultItemsfoundSelectorsFLFixedObjectCluster[ testSelector expectedFailstestingEnvironmentFLFixedObjectCluster$ testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailscontextsessionprocessFLFixedObjectClusterP testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClassFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster5 testSelector expectedFailsoldValueFLFixedObjectCluster testSelector expectedFailseditorFLFixedObjectCluster' testSelector expectedFailstestingEnvironmentpatchFLFixedObjectCluster testSelector expectedFailsFLFixedObjectClusterW testSelector expectedFailsaPDPackageCyclepackageApackageBpackageCFLWordObjectClusterFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClassFLFixedObjectClusterw testSelector expectedFails operationsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster!H testSelector expectedFailsparametersToUseinstancemethodglobalsencoder optimizationliteralExampleexpectedLiteralValueFLFixedObjectCluster testSelector expectedFailstestingEnvironmentpackage2package1 mcPackage1 mcPackage2 classToRemoveFLFixedObjectClusterE testSelector expectedFails emptySlotsFLFixedObjectCluster testSelector expectedFailscanvasshape interactionFLFixedObjectClusterv testSelector expectedFailsrootfileSystemModelfileSystemPresenterfilterFLFixedObjectCluster # testSelector expectedFails classFactoryoldSystemAnnouncerFLFixedObjectCluster testSelector expectedFailscompletionClasssystemNavigationfetcherexpectedElementsFLFixedObjectCluster  testSelector expectedFailslog logBuilderFLFixedObjectCluster% testSelector expectedFailsFLFixedObjectCluster% testSelector expectedFailsparametersToUse presenterspecInitializationStrategywindowbackendForTestFLFixedObjectCluster- testSelector expectedFailsFLFixedObjectClusterJ testSelector expectedFailsmatrixFLFixedObjectClusterO testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClass constructorFLFixedObjectCluster testSelector expectedFailstestingEnvironmentaClass anotherClassyetAnotherClassFLFixedObjectCluster testSelector expectedFailsparametersToUseinstancemethodglobalsencoder optimizationoptimisationsActivereplacedMethodsFLFixedObjectCluster%& testSelector expectedFailstestingEnvironmenttestEnvironmentFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster filehandleforWrite semaphoresemaphoreIndex peekBufferFLFixedObjectClusterV testSelector expectedFailsFLFixedObjectCluster*/ testSelector expectedFailsparametersToUse presenterspecInitializationStrategywindowbackendForTestFLFixedObjectCluster testSelector expectedFailstestingEnvironmentfullempty collectResultemptyButAllocatedWith20 elementNotIncollectionOfFloatcollectionIncludednonEmpty1elementwithoutEqualElementscollection5ElementscollectionWith3ElementscollectionOfNonIdenticalFLFixedObjectCluster+ testSelector expectedFailsFLFixedObjectClusterh testSelector expectedFailsparametersToUse presenterspecInitializationStrategywindowbackendForTestFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelFLFixedObjectClusterq testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailstestingEnvironmentaClass anotherClassyetAnotherClassyetYetAnotherClassFLFixedObjectClusterG testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsparametersToUseFLFixedObjectCluster testSelector expectedFailsFLFixedObjectClusterN testSelector expectedFailsparametersToUsetestingEnvironmentmodelFLFixedObjectCluster$ testSelector expectedFailsparametersToUse presenterspecInitializationStrategywindowbackendForTestlayoutFLFixedObjectCluster testSelector expectedFailstestingEnvironmentaClass anotherClassyetAnotherClassyetYetAnotherClassFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster  testSelector expectedFailsparametersToUseFLFixedObjectClusterU testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailstestingEnvironmentFLFixedObjectCluster testSelector expectedFailsparametersToUse ffiLibraryFLFixedObjectCluster testSelector expectedFailstestingEnvironmentFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelFLFixedObjectCluster&v testSelector expectedFailslocatorFLRectangleClusterFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster0 testSelector expectedFailsFLFixedObjectClusterF testSelector expectedFailsFLFixedObjectClusterZ testSelector expectedFailstestingEnvironmentFLFixedObjectCluster testSelector expectedFailsparserFLFixedObjectClusterM testSelector expectedFailsmessageFLFixedObjectCluster# testSelector expectedFailsinstanceFLFixedObjectCluster  testSelector expectedFailsmorphFLFixedObjectCluster4 testSelector expectedFails filesystemFLFixedObjectCluster3name priorityListsFLFixedObjectCluster] testSelector expectedFailsparsersubject splitterClasslinkFLFixedObjectCluster  testSelector expectedFailsFLFixedObjectClusterg testSelector expectedFailsFLFixedObjectCluster 5 testSelector expectedFailsclassDefinitionFLFixedObjectCluster testSelector expectedFailscshapesfFLFixedObjectCluster testSelector expectedFailsparametersToUseconfigurationSelectorformatterClass contextClassFLFixedObjectClusterE testSelector expectedFailsFLFixedObjectCluster0Y testSelector expectedFailsaBlockcontextOfaBlockFLFixedObjectCluster  testSelector expectedFailsbaseUrlofflineSettingFLFixedObjectCluster testSelector expectedFails resetWindowFLFixedObjectClusterfoptions environmentproductionEnvironment parserClasssemanticAnalyzerClassastTranslatorClassbytecodeGeneratorClass encoderClassastTransformPluginsastParseTransformPluginsrequestorScopeClassbindingscompiledMethodClass semanticScopeFLFixedObjectCluster testSelector expectedFailsparametersToUseconfigurationSelectorformatterClass contextClassFLFixedObjectCluster? testSelector expectedFailstestingEnvironmentnonEmpty5ElementsNoDuplicateempty elementNotInelementTwiceIncollectionWithEqualElementsnonEmpty1Element"collectionWithSameAtEndAndBegining collectionWith1TimeSubcollection collectionWith2TimeSubcollectioncollectionNotIncludednonEmptySubcollectionelementInNonEmptyreplacementCollectionSameSizesortedCollectionFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClassFLFixedObjectCluster testSelector expectedFailsticker schedulersuspendedDelaysHeapFLFixedObjectCluster&\ testSelector expectedFailsparserFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster* testSelector expectedFails debugSessionsindarinSessionFLFixedObjectClusterp testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsmFLFixedObjectClusteri testSelector expectedFailscurrentStrategyFLFixedObjectClustery testSelector expectedFails environment groupProvider builtGroupsFLFixedObjectCluster  testSelector expectedFailsFLFixedObjectCluster D testSelector expectedFailstestingEnvironmenthashFLFixedObjectCluster testSelector expectedFailscontextsessionprocessFLFixedObjectCluster startstopstepFLFixedObjectCluster " testSelector expectedFailsFLFixedObjectClusterX testSelector expectedFailsFLFixedObjectCluster~ testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClassFLFixedObjectCluster testSelector expectedFailsareapositioneventFLFixedObjectCluster  testSelector expectedFailstestingEnvironment conflictsFLFixedObjectCluster testSelector expectedFailscanvasFLFixedObjectCluster' testSelector expectedFails testClass compileTargetFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClassFLFixedObjectCluster testSelector expectedFailsamStateFLFixedObjectCluster testSelector expectedFailsoccurrencesBrowserPresenterFLFixedObjectCluster  testSelector expectedFailsinstVarForTestFLFixedObjectCluster testSelector expectedFailstestingEnvironmentFLFixedObjectClustero testSelector expectedFailst1t2t3t4t5t6t8t9t10t11c1c2c3c4c5c6c7c8c9c10c11t12FLFixedObjectClusterh testSelector expectedFails testPackageFLFixedObjectClusterx testSelector expectedFails environment groupProvider builtGroupsinstalledWatchpointFLFixedObjectCluster testSelector expectedFailscompletionClasssystemNavigationfetcherexpectedElementsFLFixedObjectCluster"V testSelector expectedFailsparametersToUse presenterspecInitializationStrategywindowbackendForTestFLFixedObjectCluster} testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClass constructorFLFixedObjectCluster testSelector expectedFailssegmentFLFixedObjectCluster83 testSelector expectedFailsparametersToUseinstancemethodglobalsencoder optimizationextractBlockInTempFLFixedObjectCluster testSelector expectedFailstestingEnvironmenttestEnvironmenta1b1a2b2xPackageyPackagezPackageFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster + testSelector expectedFailsFLFixedObjectCluster> testSelector expectedFailstestingEnvironment emptyDict nonEmptyDictnonEmpty5ElementsNoDuplicates indexArray valueArraynonEmpty1ElementcollectionNotIncludedcollectionIncludedassociationNotIn valueNotInkeyNotIndictionaryNotIncludeddictionaryWithDuplicateValuesduplicateValuenonEmptyWithStringFLFixedObjectCluster T testSelector expectedFailscompletionClasssystemNavigation completionFLFixedObjectCluster testSelector expectedFailsparametersToUse presenterspecInitializationStrategywindowbackendForTestFLFixedObjectCluster  testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClass constructor extraArgumentFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailstestingEnvironmentaClass anotherClassyetAnotherClassyetYetAnotherClassFLFixedObjectCluster u testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsplotxyFLFixedObjectClusterC testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailstestingEnvironment emptyDict nonEmptyDictnonEmpty5ElementsNoDuplicates indexArray valueArraynonEmpty1ElementcollectionNotIncludedcollectionIncludedassociationNotIn valueNotInkeyNotIndictionaryNotIncludeddictionaryWithDuplicateValuesduplicateValuenonEmptyWithStringFLFixedObjectCluster testSelector expectedFailsmonitor classFactory logBuilder inputEntry inputEntriesFLFixedObjectClusterU testSelector expectedFailsparametersToUse presenterspecInitializationStrategywindowbackendForTestFLFixedObjectCluster| testSelector expectedFailsparametersToUsetestingEnvironmentmodelFLFixedObjectCluster semaphore socketHandle readSemaphorewriteSemaphoreFLFixedObjectClusterW testSelector expectedFailsc1c2FLFixedObjectCluster[* parent properties parenthesesleftrightcolons argumentsbarbodyscope bcToASTCacheFLFixedObjectCluster  testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailstestingEnvironmentaClass anotherClassyetAnotherClassyetYetAnotherClassFLFixedObjectCluster2 testSelector expectedFailscurrentCompilerFLFixedObjectClusterg testSelector expectedFailsparametersToUseFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster# testSelector expectedFails environmentqueryresult resultItemsfoundSelectorsFLFixedObjectCluster$, testSelector expectedFailsparametersToUse ffiLibraryFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsparametersToUse presenterwindowbackendForTestFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelFLFixedObjectCluster  testSelector expectedFailsFLFixedObjectCluster) testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectClustert testSelector expectedFailsFLFixedObjectCluster testSelector expectedFails environment queryResultquerycursoritemsFLFixedObjectClustero testSelector expectedFailsdrTestFLFixedObjectCluster"B testSelector expectedFailsFLVariableObjectCluster outerContext compiledBlocknumArgsreceiverFLFixedObjectCluster testSelector expectedFailstestingEnvironmentFLFixedObjectClusterA testSelector expectedFailsFLFixedObjectClusterM collectionposition readLimit writeLimitstreamcrlfprevious lineEndingFLFixedObjectClusterT testSelector expectedFailsFLFixedObjectCluster! testSelector expectedFailsclassDefinitionFLFixedObjectCluster testSelector expectedFails outerMorph innerMorphFLFixedObjectCluster{ testSelector expectedFailsparametersToUsetestingEnvironmentmodelclassFLFixedObjectCluster testSelector expectedFailsparsersubject splitterClassFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster d testSelector expectedFailsclassDefinitionFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster s testSelector expectedFailsFLFixedObjectCluster) testSelector expectedFailsclassFLFixedObjectCluster@ testSelector expectedFailsparsersubjectFLFixedObjectCluster  testSelector expectedFailsstateFLFixedObjectClusteru testSelector expectedFailscritiqueBrowserrulesFLFixedObjectClusterLnanossecondsFLFixedObjectCluster testSelector expectedFails presenterpresenterModelFLFixedObjectCluster testSelector expectedFailsparametersToUseconfigurationSelectorformatterClass contextClassFLFixedObjectClusterm testSelector expectedFailsFLFixedObjectCluster nextLinksuspendedContextprioritymyListnameenveffectiveProcess terminatinglevel errorHandlerFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClassFLFixedObjectCluster= testSelector expectedFailsvarFLPointClusterFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectClusterc testSelector expectedFailsFLFixedObjectCluster testSelector expectedFails newBuilder originClass usedTrait superClassFLFixedObjectCluster testSelector expectedFailsFLFixedObjectClusterh testSelector expectedFailstestingEnvironmentemptynonEmpty collectResultemptyButAllocatedWith20otherCollectionindexCollectioncollectionWithElementcollectionOfFloat elementNotIn indexArraywithoutEqualElementsduplicateElementcollectionWithDuplicateElementcollection5ElementscollectionWith4ElementscollectionOfCollectionsOfInts collectionOfCollectionsOfStringswithCharacterssimpleCollectioncollectionOfStringcollectionWithSameBeginingEndFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClassFLFixedObjectClusterS testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectClusterg)nameescapingindexscopeusage originalVarFLFixedObjectClusterL testSelector expectedFails testClass compileTargetFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClassFLFixedObjectCluster< testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsmatchToolPresenterFLFixedObjectCluster+ testSelector expectedFailstestingEnvironmentFLFixedObjectClusterfi outerScopetempVars copiedVars tempVectorid tempVectorVarnodeFLFixedObjectCluster testSelector expectedFailst1t2t3t4t5t6t8t9t10t11c1c2c3c4c5c6c7c8c9c10c11t12FLFixedObjectCluster4 testSelector expectedFailsFLFixedObjectCluster testSelector expectedFails previewerFLFixedObjectClustern testSelector expectedFailsreaderFLFixedObjectClusterg testSelector expectedFailsaPackageaSecondPackagepackageApackageBpackageCFLFixedObjectCluster testSelector expectedFails testPackage testClass testMethod testClass2FLFixedObjectClusterA testSelector expectedFailscompletionClasssystemNavigationfetcherexpectedElementsFLFixedObjectCluster,x testSelector expectedFailsparametersToUse presenterspecInitializationStrategywindowbackendForTestFLFixedObjectClusterC testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster  testSelector expectedFailscachehaltController testObjecttrace oldTracer breakpointFLFixedObjectCluster testSelector expectedFailsarcFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClass constructorFLFixedObjectCluster  testSelector expectedFailsFLFixedObjectClusterV testSelector expectedFailsparametersToUseinstancemethodglobalsencoder optimizationextractBlockInTempextractBlock2InTempFLFixedObjectCluster testSelector expectedFailstestingEnvironmenttestEnvironmenta1t1t2xPackageyPackagezPackageFLFixedObjectClusterAselectorvaluableFLFixedObjectCluster^ testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailscanvasshapesFLFixedObjectCluster  testSelector expectedFailsrootfileSystemModelfileSystemPresenterdialogwindowFLFixedObjectClustertestCasemaxTimeForTest testCompletedservicesFLFixedObjectCluster  testSelector expectedFailsmonitor classFactory logBuilderaClassFLFixedObjectCluster  testSelector expectedFailscompletionClasssystemNavigationfetcherexpectedElementsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster( testSelector expectedFailsparametersToUse presenterspecInitializationStrategywindowbackendForTestFLFixedObjectCluster  testSelector expectedFails architectureFLFixedObjectClusterQ parent propertiesscopeselectorkeywordsPositionsbodysource argumentspragmas replacementsnodeReplacementscompilationContext bcToASTCacheFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClass constructorFLFixedObjectCluster testSelector expectedFailstestingEnvironmentaClass anotherClassyetAnotherClassyetYetAnotherClassFLFixedObjectCluster testSelector expectedFailstestingEnvironment errorMessage errorLocation errorSourcetext interactiveFLWordObjectClusterrdObter<on elemw ind withMElemyyFlicalK tcob^With,eElellectA3ents'ionWIJentsՌionO ionsZFolleolleStriϿ ICharM7implr iontonOf*olle1=hSam5c%gEndJcObjerstSe!xpec&dFLF~ctClf: Tlect*.tedFo,ametqxqStesronm}lrb[(Fixe!u9lustdڮ( te}Htor b FailϹ}dObjFer/estSɗ1expe%0sFL9'ectC.g{q esca6`exsi&Mge o(arF\jectϛQ ISelefPecte'.estC.pileELFix SClus5 /ctor{A;dFai(7HedOba8ɔteretest ~ exp>6lspGsToU3ngEnO"Ttmoass&bjec6fߏtSel)5pect?iiFLFiYtCluRp8:6ectojMedFa`shTooJ=erF14ject1X-`Sele6oo5ecten^estit4nmenMTdObj*(ber#: uter~ \mpVaO6dVarh~,ctor>]VectgdeFjectSeleJ ecte?:x1t25t6q310t8Bc3Hc7Tg$0c1q*FixeflustX>R4 t3sStor W9Fail'dObjjmerestSw1expe19as prLFLFi EOtCluvnZuectoJOdedFaQerFjectf:FLFixedObjectCluster  testSelector expectedFailsFLFixedObjectCluster  testSelector expectedFailsFLFixedObjectCluster2 testSelector expectedFailsweakSetWith3ElementsemptyFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelFLFixedObjectClusterw testSelector expectedFailsparametersToUse presenterspecInitializationStrategywindowbackendForTestFLFixedObjectCluster  testSelector expectedFailsFLFixedObjectClusterdomainrange interpolate uninterpolateclampinputoutputFLFixedObjectClusterBKparent properties parenthesesmessages semicolonsFLFixedObjectCluster testSelector expectedFailstestingEnvironmentaClass anotherClassyetAnotherClassyetYetAnotherClassFLFixedObjectClusterU testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster& testSelector expectedFailsparametersToUse presenterspecInitializationStrategywindowbackendForTestFLFixedObjectCluster testSelector expectedFailsparametersToUseFLFixedObjectCluster$ testSelector expectedFailsFLFixedObjectCluster* testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster$ testSelector expectedFailsparametersToUse presenterspecInitializationStrategywindowbackendForTestlayoutFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelFLFixedObjectCluster parent properties parenthesesreceiverselectorkeywordsPositions argumentssuperOfFLFixedObjectCluster testSelector expectedFailstext candidatescontext processorstreamFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFails presenterFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster  testSelector expectedFailstestingEnvironmentFLFixedObjectCluster testSelector expectedFailsparametersToUse ffiLibraryFLFixedObjectCluster= testSelector expectedFails prototypesFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelFLFixedObjectClusterB testSelector expectedFailsclassDefinitionFLFixedObjectCluster testSelector expectedFailsresolverFLFixedObjectClusterF testSelector expectedFailstestingEnvironment classFactoryFLFixedObjectCluster testSelector expectedFailsparsersubjectFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailssmtpsocketFLFixedObjectCluster testSelector expectedFailsclassDefinitionFLFixedObjectCluster; testSelector expectedFails filesystemguidevisitedFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectClusterm testSelector expectedFailsexistingstoredmergerFLFixedObjectClustern testSelector expectedFailsparsersubjectFLFixedObjectCluster< testSelector expectedFailsstrategyFLFixedObjectCluster testSelector expectedFailsparametersToUseconfigurationSelectorformatterClass contextClassFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClassFLFixedObjectCluster) testSelector expectedFailspasswordManagerFLFixedObjectClusterl testSelector expectedFails slotDisplayFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFails newBuilder originClass usedTrait superClassFLFixedObjectCluster. testSelector expectedFails vennDiagramFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClassFLFixedObjectCluster testSelector expectedFailsFLFixedObjectClusterr testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsbuilderFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster(~ testSelector expectedFails environmentqueryresult resultItemsfoundSelectorsFLFixedObjectCluster testSelector expectedFailstestingEnvironmentFLFixedObjectCluster testSelector expectedFailsmethodNameEditorFLFixedObjectCluster  testSelector expectedFailscontextsessionprocessFLWordObjectClusterb$!Y#Y#( #(  ! Y ) ) #(  ! Y )#!#( (  ! Y ) )#'!Y'!Y`!| Y | Y := 1. Y + 1#'Y'"!Y" '!Y'#. !#(!Y)FLFixedObjectCluster  testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClassFLFixedObjectCluster k testSelector expectedFailsatPragmaanotherAtPragmayetAnotherAtPragma atPutPragmaFLFixedObjectCluster= testSelector expectedFailssource selectioncurrentCompletionFLFixedObjectClusterW testSelector expectedFailstestingEnvironmentFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster  testSelector expectedFailsaPackageDependencyanInternalPackageDependencypackageApackageBFLFixedObjectCluster  testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClassFLFixedObjectCluster testSelector expectedFailsmutexforkedProcessesFLFixedObjectCluster@ testSelector expectedFailsangleFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsparametersToUseinstancemethodglobalsencoder optimizationextractBlockInTempFLFixedObjectCluster  testSelector expectedFailstestingEnvironment workingCopyrepositoryGroupversions versions2FLFixedObjectCluster  testSelector expectedFails emptySlotsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsrootfileSystemModelfileSystemPresenterfilterFLFixedObjectCluster] testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster# testSelector expectedFailscompletionClasssystemNavigationfetcherexpectedElementsFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClass constructorFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFails rectangleFLFixedObjectClusterf testSelector expectedFailsFLFixedObjectClusterV testSelector expectedFailstestingEnvironmenttestEnvironmentFLFixedObjectCluster- testSelector expectedFailsFLFixedObjectCluster outerScopetargetReceiverFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster  testSelector expectedFailsFLFixedObjectCluster testSelector expectedFails decoratoradapterwidgetFLFixedObjectCluster*b testSelector expectedFailsparametersToUse presenterspecInitializationStrategywindowbackendForTestFLFixedObjectCluster testSelector expectedFailstestingEnvironmentfullempty collectResultemptyButAllocatedWith20 elementNotIncollectionOfFloatcollectionIncludednonEmpty1elementwithoutEqualElementscollection5ElementscollectionWith3ElementscollectionOfNonIdenticalfloatCollectionFLFixedObjectClusterad testSelector expectedFailsparametersToUsesnippetFLFixedObjectCluster" testSelector expectedFailsparametersToUse presenterspecInitializationStrategywindowbackendForTestFLFixedObjectCluster  testSelector expectedFails slotClassFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelFLFixedObjectCluster  testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailstestingEnvironmentaClass anotherClassyetAnotherClassyetYetAnotherClassclassFLFixedObjectCluster!~ testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailschartFLFixedObjectCluster1 testSelector expectedFailsparametersToUseFLFixedObjectClusterH testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelFLFixedObjectCluster&\ testSelector expectedFailsparametersToUse presenterspecInitializationStrategywindowbackendForTestlayoutFLFixedObjectCluster ~abFLFixedObjectCluster testSelector expectedFailsfinalizationRegistryfinalizationCountfinalizerThatCounts waitSemaphorefinalizedObjectfinalizerThatRaisesError finalizerfailedFLFixedObjectCluster 1parent properties parenthesesvaluekeywordPositionsFLFixedObjectCluster: testSelector expectedFailstextmorphexpectedErrorsexpectedErrorPositionsfailureFLFixedObjectCluster$ testSelector expectedFailstestingEnvironmentaClass anotherClassyetAnotherClassyetYetAnotherClassFLFixedObjectCluster testSelector expectedFailsparametersToUseFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsmodel environmentFLFixedObjectCluster testSelector expectedFailsmockObjFLFixedObjectCluster testSelector expectedFailstestingEnvironmentFLFixedObjectCluster testSelector expectedFailsparametersToUse ffiLibraryFLFixedObjectCluster  testSelector expectedFailstestingEnvironmentFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelFLVariableObjectClusterp testSelector expectedFails filesystemFLFixedObjectClusterf testSelector expectedFailsFLFixedObjectCluster? testSelector expectedFailsFLFixedObjectCluster} testSelector expectedFailsFLFixedObjectCluster| testSelector expectedFailscommandFLFixedObjectCluster firstLinklastLink excessSignalsFLFixedObjectCluster testSelector expectedFailstestingEnvironmentFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster[ testSelector expectedFailsFLFixedObjectCluster( testSelector expectedFailsclassDefinitionFLFixedObjectClusterj testSelector expectedFails filesystemFLFixedObjectCluster testSelector expectedFailsmorphFLFixedObjectCluster 9 testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsparsersubjectFLFixedObjectCluster,l testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsparametersToUseconfigurationSelectorformatterClass contextClassFLFixedObjectClusterD testSelector expectedFailstestingEnvironmentexpecteddiffFLFixedObjectCluster  testSelector expectedFailsFLFixedObjectCluster? testSelector expectedFailsFLFixedObjectCluster," testSelector expectedFailsparametersToUse presenterspecInitializationStrategywindowbackendForTestFLFixedObjectCluster testSelector expectedFailstablestrategyFLFixedObjectCluster  testSelector expectedFailsemptybFLFixedObjectClusters testSelector expectedFailstestingEnvironmentnonEmpty5ElementsNoDuplicateempty elementNotInelementTwiceIncollectionWithEqualElementsnonEmpty1Element"collectionWithSameAtEndAndBegining collectionWith1TimeSubcollection collectionWith2TimeSubcollectioncollectionNotIncludednonEmptySubcollectionelementInNonEmptyreplacementCollectionSameSizesortedCollectionFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClassFLFixedObjectCluster testSelector expectedFailsticker schedulersuspendedDelaysHeapFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectClusterTc testSelector expectedFailstestObjectPointFLFixedObjectCluster testSelector expectedFailsnewClass superClasssubClass newClass2 superClass2FLFixedObjectCluster  testSelector expectedFailsFLFixedObjectClustervsxshxxshysyyFLFixedObjectCluster testSelector expectedFailscurrentStrategy brokenRuleFLFixedObjectCluster testSelector expectedFails environment groupProvider builtGroupsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster  testSelector expectedFailstestingEnvironmenthashFLFixedObjectClusterC testSelector expectedFailscontextsessionprocessFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClassFLFixedObjectCluster testSelector expectedFailsFLFixedObjectClusterfilehandleforWrite semaphoresemaphoreIndexFLFixedObjectCluster testSelector expectedFailsFLFixedObjectClusterT testSelector expectedFailsedsessiondebugAPImockDisplayAPIcurrentDebuggingAPIFLFixedObjectClusterkisource isScripting isParseFaultyisFaultyisFaultyMinusUndeclarednoticesvaluehasValue formattedCode skippedTestsraisemessageNotUnderstoodnumberOfCritiquesgroupdefault nodePositions styledPatternFLFixedObjectCluster testSelector expectedFailstestingEnvironmentFLFixedObjectCluster testSelector expectedFailscanvasFLFixedObjectCluster testSelector expectedFails testClass compileTargetFLFixedObjectCluster testSelector expectedFailscheckerFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClassFLFixedObjectCluster  testSelector expectedFailsFLFixedObjectCluster testSelector expectedFails replacePanelFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsparametersToUseinstancemethodglobalsencoder optimizationFLFixedObjectCluster : testSelector expectedFailstestingEnvironmentstreamwriterFLFixedObjectClustert outerScopetempVars copiedVars tempVectorid tempVectorVarnodeFLFixedObjectCluster testSelector expectedFailst1t2t3t4t5t6t8t9t10t11c1c2c3c4c5c6c7c8c9c10c11t12FLFixedObjectCluster  testSelector expectedFailscanvasFLFixedObjectCluster testSelector expectedFailsrootfileSystemModelfileSystemPresenterfilterFLFixedObjectCluster~ testSelector expectedFailsFLFixedObjectCluster shapeoffset offsetRatioFLFixedObjectCluster' testSelector expectedFails environmentqueryresult resultItemsfoundSelectorsinstalledBreakpointsFLFixedObjectClusterG testSelector expectedFailscompletionClasssystemNavigationfetcherexpectedElementsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster} testSelector expectedFailsbrowsertoolcontextFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClass constructorFLFixedObjectCluster|aparent propertiesvaluestartFLFixedObjectCluster selector arguments lookupClassmethodFLFixedObjectCluster(h testSelector expectedFailsparametersToUseinstancemethodglobalsencoder optimizationextractBlockInTempFLFixedObjectCluster testSelector expectedFailstestingEnvironmenttestEnvironmentFLFixedObjectCluster testSelector expectedFailsFLFixedObjectClusterV0 outerScopetempVars copiedVars tempVectorid tempVectorVarnode isInlinedLoopFLFixedObjectCluster# testSelector expectedFailsaStringFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailstallyFLFixedObjectClusterr testSelector expectedFailstestingEnvironment emptyDict nonEmptyDictnonEmpty5ElementsNoDuplicates indexArray valueArraynonEmpty1ElementcollectionNotIncludedcollectionIncludedassociationNotIn valueNotInkeyNotIndictionaryNotIncludeddictionaryWithDuplicateValuesduplicateValuenonEmptyWithStringFLFixedObjectCluster d testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailscompletionClasssystemNavigation statisticsFLFixedObjectCluster testSelector expectedFailsparametersToUse presenterspecInitializationStrategywindowbackendForTestFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClass constructorindexFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster bstartstopFLFixedObjectCluster parent propertiesleftBarrightBar statementsperiods temporariesFLFixedObjectCluster  testSelector expectedFailstestingEnvironmentaClass anotherClassyetAnotherClassyetYetAnotherClassFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster  testSelector expectedFailsxyplotFLFixedObjectClustertests resourcesname announcerrandomGeneratorFLFixedObjectClusterw testSelector expectedFails environment definitionFLFixedObjectCluster testSelector expectedFailstestingEnvironment emptyDict nonEmptyDictnonEmpty5ElementsNoDuplicates indexArray valueArraynonEmpty1ElementcollectionNotIncludedcollectionIncludedassociationNotIn valueNotInkeyNotIndictionaryNotIncludeddictionaryWithDuplicateValuesduplicateValuenonEmptyWithStringFLFixedObjectClusterB testSelector expectedFailsmonitor classFactory logBuilderdetectorFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelFLFixedObjectCluster( recentlyReadsocketinBuffer outBuffer inNextToWriteoutNextToWritelastReadtimeout autoFlush bufferSizebinary shouldSignalFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster!domainrange interpolate uninterpolatelinearexponentpowppowbFLFixedObjectCluster`parent properties parenthesesleftright statementsperiodsFLFixedObjectCluster testSelector expectedFailstestingEnvironmentaClass anotherClassyetAnotherClassyetYetAnotherClassFLFixedObjectClusterg testSelector expectedFails collectionFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsparametersToUseserviceFLFixedObjectCluster testSelector expectedFailsFLFixedObjectClustere testSelector expectedFailsparametersToUse ffiLibraryoldExceptionHandlerFLFixedObjectCluster* testSelector expectedFailsfileNameFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelFLFixedObjectCluster testSelector expectedFailsFLFixedObjectClustera testSelector expectedFailslgFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFails environment queryResultquerycursoritemsFLFixedObjectCluster testSelector expectedFails drTestsUIpluginsplugin1plugin2FLFixedObjectCluster testSelector expectedFailstestingEnvironmentFLFixedObjectCluster A testSelector expectedFailsFLFixedObjectCluster  testSelector expectedFailsinstancebackendFLFixedObjectCluster\ testSelector expectedFailsclassDefinitionFLFixedObjectCluster testSelector expectedFailssourcedestFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelclassFLFixedObjectClusterZ testSelector expectedFailsdpnodeobserverFLFixedObjectCluster testSelector expectedFailsparsersubjectFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsclassDefinitionFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster } testSelector expectedFails identifier preferencesoldPreferencesFLFixedObjectCluster testSelector expectedFailsFLFixedObjectClustert testSelector expectedFailsparsersubjectFLFixedObjectCluster@ testSelector expectedFailsstateFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster  testSelector expectedFails presenterpresenterModelFLFixedObjectCluster testSelector expectedFailsparametersToUseconfigurationSelectorformatterClass contextClassFLFixedObjectCluster  testSelector expectedFailscollectionWith5ElementsFLFixedObjectCluster " testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClassFLFixedObjectCluster  testSelector expectedFailsFLFixedObjectCluster"q testSelector expectedFailsaCompiledMethod aReceiveraMethodContextaSenderinstVarForTestLookupSymbolnonActiveBlockContext anArgumentFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster3 testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster) testSelector expectedFailstestingEnvironmentnonEmptyelementExistsTwiceempty collectResultnonEmpty1ElementcollectionOfFloataccessCollection elementNoteInoldSubcollectionwithoutEqualElementscollectionOfFloatWithDuplicatecollectionIncludedcollectionNotIncludedcollectionWithoutNilduplicateFloatnonEmpty5ElementscollectionWith4ElementscollectionOfString"stringCollectionSameEndAndBeginingFLFixedObjectClusterq testSelector expectedFailscontextsessionprocessFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClassFLFixedObjectCluster testSelector expectedFailsforkvalueFLFixedObjectCluster testSelector expectedFailstestingEnvironment workingCopyFLFixedObjectCluster  testSelector expectedFailsparametersToUsecanvasanimationClassFLFixedObjectCluster testSelector expectedFails testClass compileTargetFLWeakVariableObjectClusterSFLFixedObjectCluster! testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClassFLFixedObjectCluster testSelector expectedFailsrewriteBasicEditorFLFixedObjectClustera testSelector expectedFailstestingEnvironmentFLFixedObjectCluster  testSelector expectedFailst1t2t3t4t5t6t8t9t10t11c1c2c3c4c5c6c7c8c9c10c11t12FLFixedObjectCluster testSelector expectedFails testPackage testClass testMethod testClass2FLFixedObjectCluster testSelector expectedFailsdocCommentNodeFLFixedObjectCluster testSelector expectedFailswriter fileStream fileReferenceFLFixedObjectCluster>widthstylepaintFLFixedObjectCluster testSelector expectedFails tarjanPackagepackageApackageBpackageCpackageDpackageEpackageFpackageGpackageHanArrayFLFixedObjectClusterv testSelector expectedFailscompletionClasssystemNavigationfetcherexpectedElementsFLFixedObjectCluster. testSelector expectedFailsparametersToUse presenterspecInitializationStrategywindowbackendForTestFLFixedObjectCluster  testSelector expectedFailscacheFLFixedObjectCluster. testSelector expectedFailstestingEnvironment classNametestEnvironmentFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClass constructorFLFixedObjectClusterF testSelector expectedFailslineFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsparametersToUseinstancemethodglobalsencoder optimizationextractBlockInTempextractBlock2InTempFLFixedObjectCluster testSelector expectedFailstestingEnvironmenttestEnvironmentFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster  testSelector expectedFailsshapesconsearchcanvasFLFixedObjectCluster I testSelector expectedFailsrootfileSystemModelfileSystemPresenterdialogwindowFLFixedObjectCluster testSelector expectedFailstestingEnvironmentemptynonEmpty collectResultemptyButAllocatedWith20collectionWithElement collectionIncollectionNotIncollectionOfString elementNotIncollectionWithCharacters#otherCollectionWithoutEqualElementscollectionWithoutNilMoreThan5FLFixedObjectCluster testSelector expectedFailscompletionClasssystemNavigationfetcherexpectedElementsFLFixedObjectCluster1 testSelector expectedFailsmonitor classFactory logBuilderFLFixedObjectCluster( testSelector expectedFailsparametersToUse presenterspecInitializationStrategywindowbackendForTestFLFixedObjectCluster  testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClass constructorFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster* testSelector expectedFailstestingEnvironmentaClass anotherClassyetAnotherClassyetYetAnotherClassFLFixedObjectCluster: testSelector expectedFailstestingEnvironmentinstVarFLFixedObjectCluster 2 testSelector expectedFailsparametersToUse decorationFLFixedObjectCluster  testSelector expectedFailsFLFixedObjectCluster3 testSelector expectedFailsweakSetWith3ElementsemptyFLFixedObjectCluster(p testSelector expectedFailsmonitor classFactory logBuilder inputEntry inputEntriesFLFixedObjectCluster testSelector expectedFailsparametersToUse presenterspecInitializationStrategywindowbackendForTestFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelFLFixedObjectCluster testSelector expectedFailsFLFixedObjectClusterEdomainrange interpolate uninterpolatelinearFLFixedObjectCluster* testSelector expectedFailsparametersToUse presenterspecInitializationStrategywindowbackendForTestFLFixedObjectCluster  testSelector expectedFailspointFLFixedObjectCluster3 testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsparametersToUseFLFixedObjectClustercacheFLFixedObjectCluster  testSelector expectedFailsFLFixedObjectClusterc testSelector expectedFailsFLFixedObjectCluster 0 testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsparametersToUse presenterspecInitializationStrategywindowbackendForTestlayout classFactoryFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelFLFixedObjectCluster  testSelector expectedFailsparametersToUsescaleFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster( testSelector expectedFailstext candidatescontext processorstreamFLFixedObjectCluster testSelector expectedFailsfilterableListFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailstestingEnvironmentFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelFLFixedObjectCluster| testSelector expectedFailsclassDefinitionFLFixedObjectCluster testSelector expectedFailsresolveroriginalUserLocalDirFLFixedObjectCluster5registeredClassNameFLFixedObjectCluster,z testSelector expectedFailstestingEnvironmentFLFixedObjectCluster numerator denominatorscaleFLFixedObjectCluster testSelector expectedFailsparsersubjectFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsclassDefinitionFLFixedObjectClusterp testSelector expectedFails filesystemguidevisitedFLFixedObjectCluster/ testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster  testSelector expectedFails environmentbrowsernavigationStateFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster) testSelector expectedFailsFLWordObjectClusterf 2)1(;<>K   3  -V~@  >$ #   $2  ( '=*.^' z&,?.<B'  $>L?cw",%K ) b%DV(lL_ % >`y b G(/ l9$gn&D%,    $ ; h$E8)3i5A ??@F# g r65%. @Nl%<D?( %E ,T% 6,C    \ Ol J3 % & HMX  # y .#C >S\F }0 4AGUe$1 $;1HqFt 6- `W>^$*VI!/)ei*GR  *# )! Z, D>y %/T[X5 "7&[:0$0>41FL M3wS   $*e-d"+L G9ht0 h!)1d  +<z %# &4&) ]K5;)8HOr e%H < -@;." )-"2..~o7A&o`< 3p, Zc +=9 ` &8)  >,A#U".1|a4=I#1e} ~3.! 6)CX!/)X~g#s8$S  .= $ !F4/.r[AV;6G9 sq\  W-#  b'1 Zu1 -K_mx(;!.{)v3*:  4 4    ?&-%O,;'<#$.7J +3 Mq% /3$>(IYoxC%)I b&OT9W:*!%2xu, '6I?PY?<$$&_6B =- %By _L3-&Q  C ^-e&&1 0'Gz% )#Io-/7%%  2  (C:K( *  :F- ?"^U H @ 4h<#(~M[B% QaFP& =#=4JCv0<9< lIV:?q Jt*"/H+"o|$"4.+A L4("2. 3$!'Q 5J \ g*"6l,X%37  /Vk=KW%;oB(6=f5VMf 5[^,2,  O EXp  =\1 0  5U4  '-1# _o!) K"3Nce$&$oh 404%1R1,&3 46M\w5>B ( %(K_.h{.$6LY*-6>-Ze(%+>$% $7zz UiL'+x*=,8.$y G{<=% 5@ A}U(U `+;ok50< ?$/8BZjy%+0Tv4 M W z   qE!NQl2; U   18 og)Ar?. ${1'N? /:`2|   mq-&%~U>k",(OVHb+0)P     kSS(`rC"  I&7O6lj?T %"J<C"  & FW]b @0 PQ /D&C Lc4`,Zq   IE#r)>'+ H) +vG3CM0P %7  Rv-Q) u&04[sC7 ?1@!$5*  f //$!n/"$l{ =  $! #$' m7#!):)=>*m 9 ,? (Y !$ *]Y&3"Ep%-[4a^0:% -(ZEn &`@_  , -0 3 ))Jn5^ $     H+ +}3&(%.MnRHy!$ erm_mT_h$eR6:d,N)(8(x({t3 !3k 6Y3<5D  8R #1" V :@ER`H0),< Jv <9.w""Fj 39P]  D z"//2c\1{ MM $<K  R s># :'5Ew_/2j-1 #B4^^dkY1**' P.&     "]e AOFL=`:@ ".:{:$7w  ?uM "  T %1$ +!(OP:UZ$>>n:[4N- 7.A0 %=10 8q m T}0p!%*%* 9  $  A*");qHQap/c*U!4ok@*2V" ^z#x(@8>'4!-$oA1e aZ-m iEKge  3 r   *'[ i17$/8B(#j4.2P=~- )*8 %`h&;DP %  )<1 (5;Y'\#A( %s1?j0 j ""a\|) g x6G&+0 $.J  $#D - kuk$3*B~m+*/G&%?-Pb"2A   d$ 0:= %C;F2 bV {e$+n&2  :JX Kl{g&4! /(;M $,Q'l#EV 0E)  1"%&=;j4 L C T:b4s,/Hd]g&!^i@i6$& 6q[ /%M;  Sc`[.Y6,6 5Nk. l.d*] '4k8$9/A,;$4,8KQ k8+-  23E~A0EKR _ $Z 6< D[,: 3v*', F< * ;# 7= <"-8"!#:Y`+3  M,&+60'(n5Q! ,  1CI LR7 " 1(kI.5:-,$.iBv%" P 8[ YW@,:$Z5nh ?r  3EkFC^   =KY:5 "4a\'v$ 5 w ^q I9HVb 8!0d $.,14-(H(*$,T1j+ Cl-"6!#?Sk^ =,D %-D BY !Z! +t 7O,!M#<HMa;G5D,DR.   ?M[-u^ D09Ln|5>U y- 97C%1$3W$*1 &CN =N# f!! Ad' 3. w(?%A%98.F&M ;n 6G ` >8#&i"&LsW4<09% & 1~{x` #=k C+7l=1%Gu=}* (6?Pcq"P JyPp, p   XRBl D G""4@sY* y@d  ;G"JDt7 v %Q >XB 0X  Zb PfopAU z2,##   N x'I5 (,?F2GOY` 68m;c[T0& 1-$eOKp46MaOPD O  :(4 yH5 "])T8 `! s$8D. *Y ,+ )2:B!)%>K-`  DRfY ./J$=(v'= EJz &cj,%e.XY %X_ 6.F% ,7O3CPM&, G&W*/I ## j: f#4?O" S5..dat9$s% . _ 4" $p9'[}.b K,.(  7 / 17 -" d3,* )-?  #=2 R J n TZ^7+7 x V#X Bp w26*`  j|$Tzy$7#.7AS* ~.<r" dm D !N@E2*Yt7N5 -u, t=z-o$3 Cm  !-  tJQr;R # D5> P& +'=ntv   !-.3 03Ul@ ;RGMY ")7>55(bA|H8 @_$X bN%.AyV`60 ",K % W25!j}G'g  !;':fL  `'3A84 1 }C6R .m o;&Q!gs >   .B !&!,c29&  4 @ -WK$  J%[-W + V, Q%,0$qC@l(8)1n $Y.BO**?K2]( =5z,5:4PDv + "]G ,*4!6#(- #(u+%4 4"31 zwI"}2@35; / T;Z7oAd):Z1b.G1=l c79*]iVn&%2:@"jx P & r!Cl-3- /!*/G V i  >ENV)->@Lv8P 8  J)4/=o$jO  #X, r>I;R$).f  o&%x"/=p~j Y +Wf.E = s,B.%#.7AKm!>7/Z%CRS2    ( .G(J$j;_ &HS#/5<{ [}#eN]  9A><HU&)o';b"g-7G4  -cF Ny +'sw+}[) &|)*0o3* .|&#!yltk06 },3`?".4AK.5<R\*t  u,  *I\bg S 7?0B!8JY"z +H(   S15R+#/' # L <.cbc?E!edv _S&8 R  5 ZmZDH W :  >Xf !- wBS  S!4 ))V N. 'T&!/ -$7y82F/-. bRJZ( $wA&*Y a$}_"2M)( !1# F".<#B#  }D,i &i\-! |~N2)\o2 9/ )&WS\3dp$-Nlc 'VP)3  +4=I'5 L 8pmc]E-|5j, f1$Z!"4?3-D,, &<  zBB"!6M=Kf $-5=2-@w(Oa/Hu9J{ ;1   ,w:H1  R vUZ? HE\bz 1 $6 QuZMb^/%G%D*!& kZ%#&3/!.$dT Vs;b  &5'0/1 &m&B(f!* G=<13&4G"# F/.nC\( 30')(7N/#26 ;XZ  09x *8 /P%*/#rx j~,! :+ d$ $  " &!0.5 3  )% j-EQ%H%-+(nN+z!-%s8>&/JBs/*EQA `\ & / D\; (H +)TZ :F-c.'9#<   : 1@ j, /3;O&,"#;   ][%R&@n3|"  GV /6  m|kG(Ktz(b|t j%* .B"0S e/I18?U g +0/"#RbI $  <SBkDl :E 0!  0NO: 'v <)07@#z9L<fs=O #W ",  Ob# n E :T NE 23 )O@7( G8.J6  x$M+).d! 9  && Sb" ,': =C0aE#=&+!'5,', ruFLFixedObjectCluster testSelector expectedFailsclassnumberOfAnnouncementsFLFixedObjectCluster testSelector expectedFailsparsersubjectFLFixedObjectClustero testSelector expectedFailsstrategyFLFixedObjectClusterS testSelector expectedFailsparametersToUseconfigurationSelectorformatterClass contextClassFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClassFLFixedObjectCluster b testSelector expectedFailstestingEnvironmentFLFixedObjectCluster  testSelector expectedFails slotDisplayFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster* testSelector expectedFailsparametersToUse presenterspecInitializationStrategywindowbackendForTestFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFails newBuilder originClass usedTrait superClassFLFixedObjectClustera testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectClusterM* testSelector expectedFailstestingEnvironmentexample1 literalArrayselfEvaluatingArray nonSEArray1 nonSEarray2example2empty collectResultwithoutEqualElementswithEqualElementswithCharactersunsortedCollection sortedInAscendingOrderCollectioncollectionNotIncludedremovedCollectionelementInForCopyelementNotInForCopy firstIndex secondIndexreplacementCollection indexArray valueArraynonEmptyMoreThan1ElementsubCollectionNotInreplacementCollectionSameSizeoldSubCollectionnonEmpty1ElementcollectionOfCollection"collectionOfFloatWithEqualElementscollectionWithoutNilduplicateElementcollection5ElementscollectionWith4Elements collectionOfCollectionsOfStringscollectionOfCollectionsOfIntssimpleCollection%stringCollectionWithSameBeginingAnEndcollectionOfFloatrecursiveArrayFLFixedObjectCluster commandLinesessionstdoutstderrFLFixedObjectCluster1 testSelector expectedFailsbackendForTest application presenterFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClassFLFixedObjectCluster  testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster dictionary orderedKeysFLFixedObjectCluster testSelector expectedFailsbuilderFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFails testClass compileTargetFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster' testSelector expectedFails environmentqueryresult resultItemsfoundSelectorsFLFixedObjectCluster testSelector expectedFailsmethodNameEditorFLFixedObjectClusterS testSelector expectedFailscontextsessionprocessFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClassFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster. testSelector expectedFailseditorstringFLFixedObjectCluster testSelector expectedFailspatternMatcherFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster messageTexttagsignaler signalContexthandlerContext outerContextFLFixedObjectCluster testSelector expectedFailspackageAaPDPackageDependencyWrapperFLFixedObjectCluster testSelector expectedFailscompletionClasssystemNavigationFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClassFLFixedObjectCluster. testSelector expectedFailsFLFixedObjectCluster u testSelector expectedFailscircleFLFixedObjectCluster  testSelector expectedFailsFLFixedObjectCluster@ testSelector expectedFailsparametersToUseinstancemethodglobalsencoder optimizationextractBlockInTempFLFixedObjectCluster  testSelector expectedFails emptySlotsFLFixedObjectClusterQ outerScope targetClassFLFixedObjectCluster testSelector expectedFailscanvascameraFLFixedObjectCluster testSelector expectedFailsrootfileSystemModelfileSystemPresenterfilterFLFixedObjectCluster testSelector expectedFailstestingEnvironment emptyDict nonEmptyDictnonEmpty5ElementsNoDuplicates indexArray valueArraynonEmpty1ElementcollectionNotIncludedcollectionIncludedassociationNotIn valueNotInkeyNotIndictionaryNotIncludeddictionaryWithDuplicateValuesduplicateValuenonEmptyWithStringFLFixedObjectCluster  testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailscompletionClasssystemNavigationfetcherexpectedElementsFLFixedObjectClusterR testSelector expectedFailsmonitor classFactory logBuilderFLFixedObjectCluster& testSelector expectedFailsparametersToUse presenterspecInitializationStrategywindowbackendForTestFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClass constructorFLFixedObjectCluster testSelector expectedFails presenterwindowFLFixedObjectCluster xScaleyScalechartstyler masterShapeboxaxisXaxisY formatStringFLFixedObjectCluster testSelector expectedFailstriangleFLFixedObjectClusterU testSelector expectedFailstestingEnvironmentaClass anotherClassyetAnotherClassyetYetAnotherClassFLFixedObjectCluster  testSelector expectedFailscallbackFLFixedObjectCluster testSelector expectedFailstestingEnvironmenttestEnvironmentFLFixedObjectCluster` testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster' testSelector expectedFails decoratorFLFixedObjectCluster testSelector expectedFailstestingEnvironmentfullempty collectResultemptyButAllocatedWith20 elementNotIncollectionOfFloatcollectionIncludednonEmpty1elementwithoutEqualElementscollection5ElementscollectionWith3ElementscollectionOfNonIdenticalFLFixedObjectCluster7 testSelector expectedFails controllereditorFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsparametersToUse presenterspecInitializationStrategywindowbackendForTestFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelFLFixedObjectCluster testSelector expectedFailsFLFixedObjectClustertexponentFLFixedObjectCluster testSelector expectedFailstestingEnvironmentaClass anotherClassyetAnotherClassyetYetAnotherClassinstanceFLFixedObjectCluster testSelector expectedFailsFLFixedObjectClusterP testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsparametersToUseFLFixedObjectCluster { testSelector expectedFailsFLFixedObjectCluster  testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster4 testSelector expectedFailsparametersToUserunnerFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelFLFixedObjectCluster testSelector expectedFailsparametersToUse presenterspecInitializationStrategywindowbackendForTestlayoutFLFixedObjectClusterT testSelector expectedFailstestingEnvironmentaClass anotherClassyetAnotherClassyetYetAnotherClassFLFixedObjectClustero testSelector expectedFailstextmorphexpectedErrorsexpectedErrorPositionsfailureFLFixedObjectClusterR testSelector expectedFailstext candidatescontext processorstreamFLFixedObjectCluster  testSelector expectedFailsFLFixedObjectCluster( testSelector expectedFailsFLFixedObjectCluster testSelector expectedFails environment groupProvider builtGroupsFLFixedObjectCluster testSelector expectedFailstestingEnvironmentFLFixedObjectCluster testSelector expectedFailstestingEnvironmentFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelFLFixedObjectCluster testSelector expectedFailsclassDefinitionFLFixedObjectCluster testSelector expectedFailsFLFixedObjectClusters testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailstestingEnvironmentgenFLByteObjectCluster \cp`.\cp@j\cp j\cpPz}RfFLFixedObjectCluster testSelector expectedFailstestingEnvironmentFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectClustera testSelector expectedFailsclassDefinitionFLFixedObjectCluster testSelector expectedFails filesystemFLFixedObjectCluster argumentsFLFixedObjectClusterQ testSelector expectedFailsFLFixedObjectClustercurrentSession categories guiCategory toolsCategorynetworkCategorysystemCategory userCategoryFLFixedObjectCluster n testSelector expectedFailsFLFixedObjectCluster' testSelector expectedFailsmanagerFLFixedObjectCluster  testSelector expectedFailsparsersubjectFLFixedObjectCluster testSelector expectedFailstestingEnvironment clientStream serverStreamFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsparametersToUseconfigurationSelectorformatterClass contextClassFLFixedObjectCluster testSelector expectedFailstestingEnvironmentuniversalEnvironmentFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster* testSelector expectedFailsfactorybuilderFLFixedObjectClusterP testSelector expectedFailstablestrategyFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsnextLinknlistlink1link2link3link4nonEmpty otherListlinkcollectionWithoutNilnonEmpty1ElementcollectionWithoutEqualElements elementNotIn elementIncollection5Elements collectResultunsortedCollectionsortedCollectionFLFixedObjectCluster& testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClassFLFixedObjectCluster testSelector expectedFailsticker schedulersuspendedDelaysHeapFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster  testSelector expectedFailsprofmockViewFLFixedObjectCluster testSelector expectedFailsnewClass superClasssubClass newClass2 superClass2numberOfAnnouncementsnewTraitFLFixedObjectClusterA testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFails breakpointclspreviousBreakpointsobserveroldSystemAnnouncerFLFixedObjectCluster testSelector expectedFails environment groupProvider builtGroupsFLFixedObjectCluster testSelector expectedFailstestingEnvironmentstreamFLFixedObjectCluster testSelector expectedFails historyListsavedFLFixedObjectCluster| testSelector expectedFailscontextsessionprocessFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClassFLFixedObjectCluster testSelector expectedFailsFLFixedObjectClusterO testSelector expectedFailsFLByteObjectCluster9#NJFLFixedObjectCluster$ testSelector expectedFailsedsessiondebugAPImockDisplayAPIcurrentDebuggingAPIFLFixedObjectCluster testSelector expectedFailstestingEnvironmentFLFixedObjectClusterhnameescapingindexscopeusageFLFixedObjectCluster testSelector expectedFails testClass compileTargetFLFixedObjectClusterinvertedFLFixedObjectCluster testSelector expectedFailsanalyzerFLFixedObjectCluster name owningClass definingClassindexFLFixedObjectCluster% testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClassFLFixedObjectCluster  testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsscopeSelectorPresenterFLFixedObjectCluster9 testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsparametersToUseinstancemethodglobalsencoder optimizationFLFixedObjectClusterq testSelector expectedFailstestingEnvironmentversionvisitedFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster@ testSelector expectedFailsFLFixedObjectCluster  testSelector expectedFailsrootfileSystemModelfileSystemPresenterfilterFLFixedObjectCluster$ testSelector expectedFails environmentqueryresult resultItemsfoundSelectorsinstalledCountersFLFixedObjectCluster testSelector expectedFailsFLFixedObjectClusterz testSelector expectedFailscompletionClasssystemNavigationfetcherexpectedElementsFLFixedObjectCluster testSelector expectedFailsparametersToUse presenterspecInitializationStrategywindowbackendForTestFLFixedObjectCluster testSelector expectedFailsbrowserFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClass constructor testClassFLFixedObjectCluster- testSelector expectedFailsintType int32TypevoidTypecharType uint32TypectxresolverFLFixedObjectClusterparent propertiescontentsstartstopFLFixedObjectCluster testSelector expectedFailsellipseFLFixedObjectCluster testSelector expectedFailsparametersToUseinstancemethodglobalsencoder optimizationFLFixedObjectCluster testSelector expectedFailstestingEnvironmenttestEnvironmentFLFixedObjectCluster  testSelector expectedFailsFLFixedObjectCluster3 testSelector expectedFailsFLFixedObjectCluster  testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailstestingEnvironment emptyDict nonEmptyDictnonEmpty5ElementsNoDuplicates indexArray valueArraynonEmpty1ElementcollectionNotIncludedcollectionIncludedassociationNotIn valueNotInkeyNotIndictionaryNotIncludeddictionaryWithDuplicateValuesduplicateValuenonEmptyWithStringFLFixedObjectCluster  testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsparametersToUse presenterspecInitializationStrategywindowbackendForTestFLFixedObjectCluster $ testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClass constructorindexFLFixedObjectCluster testSelector expectedFailsFLFixedObjectClusterk textColortextFonttextSize tickColor spineColorFLFixedObjectCluster8 testSelector expectedFailstestingEnvironmentaClass anotherClassyetAnotherClassyetYetAnotherClassFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster? testSelector expectedFailsplotyFLFixedObjectCluster testSelector expectedFailsFLFixedObjectClusterstreamencoderFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelFLFixedObjectCluster testSelector expectedFailsFLFixedObjectClusterdomainrange interpolate uninterpolateconstantlinearFLFixedObjectCluster testSelector expectedFailstestingEnvironmentaClass anotherClassyetAnotherClassyetYetAnotherClassFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsparametersToUseserviceFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster  testSelector expectedFailsparametersToUse ffiLibraryFLFixedObjectCluster48 testSelector expectedFailsemptyRectangle rectangle1FLFixedObjectCluster# testSelector expectedFailsparametersToUsetestingEnvironmentmodelFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectClusterVparent properties parenthesesstartstopvalue sourceTextFLFixedObjectCluster= testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsivarForTestingFLFixedObjectCluster  testSelector expectedFails environment queryResultquerycursoritemsFLFixedObjectCluster% testSelector expectedFailstestingEnvironmentFLFixedObjectCluster testSelector expectedFailsparserFLFixedObjectCluster{ testSelector expectedFailsFLFixedObjectCluster  testSelector expectedFailslabel1morph1label2morph2panelFLFixedObjectCluster testSelector expectedFailsclassDefinitionFLFixedObjectCluster+ testSelector expectedFailsdpnodecontextdp2cls testClass testSubclassFLFixedObjectCluster testSelector expectedFailsparsersubjectFLFixedObjectCluster" testSelector expectedFails generatorFLFixedObjectCluster7 testSelector expectedFailswindowFLFixedObjectCluster testSelector expectedFailsaClassFLFixedObjectCluster7 testSelector expectedFailsparametersToUseconfigurationSelectorformatterClass contextClassFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster  testSelector expectedFails identifier preferencesFLFixedObjectCluster  testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsparsersubjectFLFixedObjectClusterz testSelector expectedFailsstateFLFixedObjectCluster testSelector expectedFailsrulesSelectorPresenterrules rulesByGroupFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsparametersToUseconfigurationSelectorformatterClass contextClassFLFixedObjectCluster testSelector expectedFailsFLFixedObjectClusterS testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClassFLFixedObjectCluster testSelector expectedFailsticker schedulersuspendedDelaysHeapFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster6 testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster  testSelector expectedFailsresultbuilderFLFixedObjectClusterj testSelector expectedFailscanvasboxesFLFixedObjectCluster testSelector expectedFailsFLFixedObjectClusterkFLFixedObjectCluster testSelector expectedFailsreg1reg2resultFLFixedObjectCluster testSelector expectedFailscontextsessionprocessFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClassFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster W testSelector expectedFailstestingEnvironmentFLFixedObjectCluster testSelector expectedFails testClass compileTargetFLFixedObjectClusterR testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClassFLFixedObjectCluster& testSelector expectedFails ruleLoaderFLVariableObjectCluster                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         I                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         FLFixedObjectCluster testSelector expectedFailst1t2t3t4t5t6t8t9t10t11c1c2c3c4c5c6c7c8c9c10c11t12cacbtatbtctdFLFixedObjectCluster testSelector expectedFails testPackage testClass testMethod testClass2oldRulesSettingsFLFixedObjectClustersourcenodecachedExpressionNodeFLFixedObjectCluster  testSelector expectedFails environment groupProvider builtGroupsFLFixedObjectCluster testSelector expectedFailsmergerFLFixedObjectCluster testSelector expectedFailscompletionClasssystemNavigationfetcherexpectedElementsFLFixedObjectCluster  testSelector expectedFailsFLFixedObjectCluster  testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClass constructorFLFixedObjectClusterH testSelector expectedFailstestingEnvironmentxyclassFLFixedObjectClusterZ xScaleyScalechartstyler masterShape markerColorgetRelevantValueBlocklines formatStringFLFixedObjectClustery testSelector expectedFailspointFLFixedObjectCluster testSelector expectedFailsparametersToUseinstancemethodglobalsencoder optimizationextractBlockInTempFLFixedObjectCluster V testSelector expectedFailstestingEnvironmenttestEnvironmentnumberOfAnnouncementsFLFixedObjectCluster  testSelector expectedFailsFLFixedObjectCluster ' testSelector expectedFailscanvasshapesFLFixedObjectCluster } testSelector expectedFailsrootfileSystemModelfileSystemPresenterdialogwindowFLFixedObjectCluster testSelector expectedFailstestingEnvironmentemptynonEmpty collectResultemptyButAllocatedWith20collectionWithElement collectionIncollectionNotIncollectionOfString elementNotIncollectionWithCharacters#otherCollectionWithoutEqualElementscollectionWithoutNilMoreThan5equalNotIdenticalElement elementToCopy'identityBagNonEmptyNoDuplicate5ElementsFLFixedObjectCluster testSelector expectedFailscompletionClasssystemNavigationfetcherFLFixedObjectCluster(, testSelector expectedFailsparametersToUse presenterspecInitializationStrategywindowbackendForTestFLFixedObjectClusterQ testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClass constructor extraArgumentFLFixedObjectCluster6 testSelector expectedFailsFLFixedObjectCluster` testSelector expectedFailstestingEnvironmentaClass anotherClassyetAnotherClassyetYetAnotherClassFLFixedObjectClusterGexecutionEnvironment isEnabled testFailuresshouldSuspendBackgroundFailuresshouldFailTestLeavingProcessesshouldTerminateProcessesFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster name environmentFLFixedObjectCluster testSelector expectedFailstestingEnvironment emptyDict nonEmptyDictnonEmpty5ElementsNoDuplicates indexArray valueArraynonEmpty1ElementcollectionNotIncludedcollectionIncludedassociationNotIn valueNotInkeyNotIndictionaryNotIncludeddictionaryWithDuplicateValuesduplicateValuenonEmptyWithStringkeysdictFLFixedObjectCluster testSelector expectedFailsmonitor classFactory logBuilder inputEntry inputEntriesFLFixedObjectCluster testSelector expectedFailsparametersToUse presenterspecInitializationStrategywindowbackendForTestFLFixedObjectCluster  testSelector expectedFailsparametersToUsetestingEnvironmentmodelFLFixedObjectCluster testSelector expectedFailsFLFixedObjectClusterxdomainrange interpolate uninterpolatelinearbasepositiveFLFixedObjectCluster&' testSelector expectedFailsparametersToUse presenterspecInitializationStrategywindowbackendForTestFLFixedObjectCluster testSelector expectedFailsFLFixedObjectClusterU testSelector expectedFailsFLFixedObjectCluster& testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsparametersToUseserviceFLFixedObjectCluster  testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectClusterf testSelector expectedFailsFLFixedObjectCluster+ testSelector expectedFailsparametersToUse presenterspecInitializationStrategywindowbackendForTestFLFixedObjectClusterP testSelector expectedFailsparametersToUsetestingEnvironmentmodelFLFixedObjectCluster testSelector expectedFails filesystemFLFixedObjectCluster testSelector expectedFailsFLFixedObjectClusterparent properties parenthesesstartstop isByteArraycontents openerSizeFLFixedObjectCluster` testSelector expectedFailstext candidatescontext processorstream backWindow1 backWindow2 topMostWindowFLFixedObjectCluster  testSelector expectedFailsFLFixedObjectCluster/ testSelector expectedFailsfunctionFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailstestingEnvironmentFLFixedObjectCluster testSelector expectedFailsmanagerwindowFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelFLFixedObjectCluster testSelector expectedFailsclassDefinitionFLFixedObjectCluster testSelector expectedFailsresolverFLFixedObjectCluster testSelector expectedFailsbrowserFLFixedObjectClusterM testSelector expectedFailscommandFLFixedObjectCluster testSelector expectedFailsparsersubjectFLFixedObjectClusterO testSelector expectedFailsFLFixedObjectCluster e testSelector expectedFailsaSliderwindowFLFixedObjectCluster testSelector expectedFailsclassDefinitionFLVariableObjectClusterL testSelector expectedFailsFLFixedObjectCluster* testSelector expectedFailsresultleftrightFLFixedObjectCluster_ testSelector expectedFailsmorphFLFixedObjectCluster  testSelector expectedFailsFLFixedObjectCluster  testSelector expectedFails preferences persistencecheckerFLFixedObjectCluster  testSelector expectedFailsclassnumberOfAnnouncementsFLFixedObjectCluster  testSelector expectedFailsparsersubjectFLFixedObjectCluster testSelector expectedFailsstrategyFLFixedObjectCluster  testSelector expectedFailsFLFixedObjectCluster testSelector expectedFails presenterpresenterModelFLFixedObjectCluster testSelector expectedFailsparametersToUseconfigurationSelectorformatterClass contextClassFLFixedObjectCluster  testSelector expectedFailscountFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClassFLFixedObjectCluster  testSelector expectedFails slotDisplayFLFixedObjectCluster  testSelector expectedFailssubjectofflineSettingisCachingRessourcesSettingFLFixedObjectCluster  testSelector expectedFailsFLFixedObjectCluster5 testSelector expectedFails newBuilder originClass usedTrait superClassFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster announcer propertiespaintpathborderparentisFixedencompassingRectanglemodelisDirty entryIndex baseRectanglematrixconnectedLinesshouldUpdateLines cornerRadiusFLFixedObjectClusterF testSelector expectedFailstestingEnvironmentcollectionWithElementotherCollectionnonEmptyempty elementNotIn collectResultexpectedElementByDetect speciesClasselementTwiceIndoWithoutNumberelementexpectedSizeAfterRejectcollectionNotIncluded!nonEmpty5ElementsWithoutDuplicatesameAtEndAndBeginingnonEmpty1Element indexArray subCollectionduplicateElementcollectionWithDuplicateElementcollectionWith4ElementsstringCollectionFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster i testSelector expectedFails inspectorFLFixedObjectCluster6 testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClassFLFixedObjectCluster/ testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster  testSelector expectedFailsbuilderFLFixedObjectClusterY testSelector expectedFailsFLFixedObjectCluster testSelector expectedFails testClass compileTargetFLFixedObjectCluster. testSelector expectedFailsobj1obj2wpobj3obj4observer testClass testSubclassFLFixedObjectCluster, testSelector expectedFails environmentqueryresult resultItemsfoundSelectorsFLFixedObjectCluster& testSelector expectedFailssycRefactoringPreviewFLFixedObjectCluster testSelector expectedFails testedValueFLWordObjectCluster!YYFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClassFLFixedObjectCluster  testSelector expectedFailsFLFixedObjectCluster d testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailstestingEnvironment repositorydictFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster  testSelector expectedFailsoldRelationGraphnewRelationGraphpackageRelationGraphDiffpackageApackageBFLFixedObjectCluster managerdeferredStartupActions propertiesFLFixedObjectCluster5 testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClassFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailssubjectFLFixedObjectCluster  testSelector expectedFails coordinatesFLFixedObjectClusterO testSelector expectedFailsivarForTestingFLFixedObjectCluster commandLinesessionstdoutstderrFLFixedObjectCluster testSelector expectedFailstestingEnvironmenttestEnvironmentFLFixedObjectCluster testSelector expectedFailsFLFixedObjectClusterX testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster  testSelector expectedFailsrootfileSystemModelfileSystemPresenter windowPathUIFLFixedObjectCluster$ testSelector expectedFails nonEmptyDictFLFixedObjectCluster testSelector expectedFailsmonitor classFactory logBuilderFLFixedObjectCluster testSelector expectedFailscompletionClasssystemNavigationfetcherexpectedElementsFLFixedObjectCluster" testSelector expectedFailsparametersToUse presenterspecInitializationStrategywindowbackendForTestFLFixedObjectCluster testSelector expectedFailsparametersToUsetestingEnvironmentmodelrbClass constructorFLFixedObjectCluster testSelector expectedFails presenterwindowFLFixedObjectCluster testSelector expectedFailsvectorFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailstestingEnvironmentaClass anotherClassyetAnotherClassyetYetAnotherClassFLFixedObjectCluster testSelector expectedFailstestingEnvironmenttestEnvironmentFLFixedObjectCluster  testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster3 testSelector expectedFailsFLFixedObjectCluster  testSelector expectedFails classFactory impactFilterFLFixedObjectCluster  testSelector expectedFailsparametersToUse presenterspecInitializationStrategywindowbackendForTestFLFixedObjectCluster4 testSelector expectedFailsparametersToUsetestingEnvironmentmodelFLFixedObjectCluster testSelector expectedFailsFLFixedObjectCluster&J testSelector expectedFailsparametersToUse presenterspecInitializationStrategywindowbackendForTestFLFixedObjectClusterM testSelector expectedFailstestingEnvironmentaClass anotherClassyetAnotherClassyetYetAnotherClassFLFixedObjectCluster testSelector expectedFailscompilerFLFixedObjectCluster testSelector expectedFailsFLFixedObjectClusterW testSelector expectedFailsticksFLFixedObjectCluster testSelector expectedFailsFLDictionaryCollectionClustergFLSimpleCollectionCluster[_%  F      $ b9$dUl/ ,    !W Z" 1-H$ 1?  60v IArte$   n)BJ    . 4 .3 grm73 + e F  Y"1  FLSimpleCollectionClusterj?    FLDictionaryCollectionCluster#M    FLSubstitutionClusterFBgg+Ugggpwggg sLggggg,n~(ggggg%~ggggg#ggggg\.ggggggg EMggggggg*Jggggggg.,ggggggg,'E.t-(z/t-?'! 1:=,4Vf.")% ^9OcG1 x* 1 2/L-i$S l]#.T"vgggggrggggg1.Aggggg)PTggggg1gggggR{ gggggggggg"]ggggg& ggggg! Aggggg-3>|ggggg qeEggggg u ggggg&Yۘggggg/zUgggggmrggggg,6 ggggg1LW{gggggQ}ggggg" A9gggggWggggg1 ggggg]Qggggg I3ggggg/gggggZMggggg,kggggg+7;ggggg Nggggg gggggggggg!Cggggg-jggggg&ggggg!(ggggg!9L/g.Rg1R6Dg2g*}g'g Nggh#CgImggpgg.,Qg/ !g#3gZZ?g]g!Lag+Tg..Tg(wag3WTg.6agӔTg." Tg%mTg+ Tg#13ag1~=ag`0ag`ag Tag."aghfag #ag%Iag33agpag+ag RTg  ag >Tg1ZTg#оTg< Tg Tg1bag1?Tg 2Tg!DDTg agjTg(wyTg%7g= g$g#5g Ng '[g[g $g"tCg>/g$%g g/^`g/vg2ԛg!g g,Hgg*3gt gD2gg-g g&og$mZg'egi<g4$g.ߵg0!gS9g"&gWyg4g ]XgggGgggggg4ggg,T)#gggOWggg,+ggg,xggg ѭgcg(9kgM|g, )g"|]g-d+g fg(ܾg(ng#vg,XgOg :9g(?g!qfg#O"3ux[/VDPmBggggg2*cggggg-wkggggghMggggg/Sggggg%_|ggggg2Rggggg^fggggg)wggggggXggggg ggggggBqggggg g#ggL(gg1\0g}g9g/_g]g)g"#<g Nbdg+g bj 1P/e*uW#wbp=Tgg gg*gg!dgg :gg!g  g%t'g(/ng#^Cg(YgGg(*g" g0Ng-dg i g, $g,Sg(9hg-g1Jg 4 }g%^g1g*|Hkgg7 g1Xg- 7g0ig2?$g.Sg g'[aM-VF+f ai #B0ggurgg.ggCTgg(zggggmNgg0 ^ggBWYgg)XggRgg ;ggؾggCggEj~gg %gg$Dgg0'rggg%rgggIcrggg,ol#rgggrggg }Mrgggxrggg&|rggg(vrgggfrggg rggg'nrggg"Qw+rggg/Yrggg ]rgggׅrggg rggg+qrgggyrggg 4ggg2cg@g]bg&Hwg/)-g gDhgg"M#gtFg1g0g.bg#g.8g0_gOgbUg &Egg-Nԙgggg8gggg!' 2`,:!4^ggggv@g gg3ggg1ggggv?g gg3gggSiggggv>g gg3gggY*`Sgg[gg*tgg%ngg3=gg gg1cgg>Fgg#}:ggnEYgggg)lgg 'kggfgg#Mgg!Mgg-[ 5gg&\tSgg x/gg+gg%VggZgg*|gg)e7gg/gg+^rggggNԬgg?ggYggQfgg'fgg"gggg1H'gg0gg*<ngg$u*CgghggPagg( gg#w gg2/gg ggXgg.ggggl:cgggg-a6gg+Wa7gg"}ggggg*&Bgg)*gg/iLgg$`$gggg"Jgg*bngg2qgg1U,ggv1gg ?SIgg gg+ygg 4gg' Xgggg-9fggggbggggLrX6[t11+&~;$'9i)`.*]$gR/! Ehb/P#(~I&[p2 3 Ob ? L0ggg-ggg%y0ggg2}ggg._ggg ggggggggggggg(#Dggg@Inggg,pggg2Bggg$ "ggg bmggg.ggg.CF#u~g [gdg)!hg!FEgl0g!Mg!VBg27g @g&g.+fg0"2g g!Pgw8g)Yg#>g):gRadgBg)Kg [gqg,-%g5%g@d" lO+|+UwV Y1 +3q0J[ggg ggggggg,ڃgggwEggg+MgggQ ggg8tggg/ggg0ZV_ggg8ggg^ggg Uggg"@ggg"Jggg.Hmggg/*ggg/gggPggg #ggg[ggg/SgggM:ggg,F:ggg+Bggg !iggg%gggK+ggg-=gggSgggggg5;ggg >aggg`g\gg-oe+g~g%DFg N<g(gg-fNg!ug"gg+8g=g/+g'xbg Wg'.b]g,Fg2u}gg#!gxRgFg'eJgggJۜggg/K[ggg#<L yggg yggg.68gggrӍ8ggg  8ggg(~6 yggg%AX yggg. yggg# ygggrI ygggY8gggpz yggg  ygggR8ggg$h\ yggg(38ggg$88ggg#<Z8ggg%Aз8ggg8gggZ"1gPggg-}g @ggvMgg$]fgg-7agg%Dggggggggg&Ngggggggggggggggggg ggggggggg!^8ggggggggg/Nggggggggg3Gggggggggg ggggggggg  gggggggggggggggggg(gggggggggAggggggggg\Sggggggggg\ggggggggg(!ggg).ggg1Tggg/{dggg&ggg(  ggg1m ggg&o gggWggg)4 ggg/< ggg4 ggg(gggD9 gggj ggg&Jggg U7g-f**ggggg1_+ggggg(ggggg.w gggggggggg^Vggggglggggg H ggggg;ggggg ggggg/^ggggg ggggg  ggggg$i3ggggg$gggggKS.ggggg zgggggPxg=gM(cZAgI g?iegt(c@E1g;9G0g`Sg]$(c\ kgCag S"=gK*FgQygXUg@He g (c< gcV"=gFXlg[R5=g(cW=g-(cN/gU4=gL(c= gEtg (cE*gXvVgP1"gP0gfP0g#91*gR g1Hg].PgT0g\g?gD=g(cN=go(cVggK"gY'Ng[K"=gQGg9=g E gQ_H.:gggg ugggggg=gggggg)Pgggggg,cgggggg /gggggggggggg!'Rgggggg+7gggggg& ggggggQgggggg Agggggg]|tgggggg1gggggg"^Zgggggg%Upgggggg,6ԒggggggggggggHgggggggggggg ngggggg! vgggggg2gggggggggggg IXgggggg qgggggg" gggggg!fgggggg/QggggggRgggggg1L߭ggggggUgggggg1q{gggggg,gggggg1S2gggggg-3gggggg-ygggggg <c ]^ 2ih-$SebFgggg0gggg(ugggg&VCgggg.gggg 9gggg"xgggg wgggg ?;gggg 2gggg)>.\ggggTgggg &gggg!0lB;gggg 2M;gggg1 gggg!0Wgggg)>;gggg(f;ggggY#;gggg1aw;gggg q;gggg(gggg ?BggggV g, ogggg,>gggg z%gggg $ogggg=gggg׸gggg<ogggg=rogggg 0gggggg'[gggggg cqggggggEggggggl8gggggg1IMgggggg-VKgggggg7ggggggH@ gggggggggggg-tfggggggjgggggg Pgggggg)?Ygggggg$Ggggggg!amgggggg,KBgggggg KggggggR-/gggggg ?L9g)dg&F6Ng 0g&}g_ggg+g1hg'#Mg("IwgYp)g$g +g3g2g"c<gggggg)gggggg'=gggggg&ngggggg gggggg0gggggggggggg~gggggg?ggggggGgggggg6gggggg"2gggggg#pgggggg zggggggygggggg,iQgggggg;gggggg-gggggg ߙgggggg/jggggggSggggggqjggggggyggggggD6! OgggggT Oggggg!L q Oggggg Cm> Oggggg Oggggg Oggggg Q Oggggg&3] Oggggg' Oggggg(Z Oggggg ; Oggggg%; Oggggg/ Oggggg% Oggggg&C Oggggg+jn Oggggg 3mgg6*gg{gg%ggglgggg&9 gg'3eggZ%gg#Dgg$h# &^/%V 26SjP-*x2L:g$igy}gggh g2#Og-Ixg1p*gpg E-^t&HL`gggggggggggggggg /Lagggggggggggggggg#LbggggggggggggggggLcgggggggggggggggg gggggggggggggggggggggggggggggggg-ggggggggggggggggnsgggggggggggggggg!sgggggggggggggggg0<sggggggggggggggggl.dgggggggggggggggg$0.egggggggggggggggg(.fgggggggggggggggg gggggggggggggggg$ggggggggggggggggNggggggggggggggggggggggggggggggggTggggggggggggggggTgggggggggggggggg.Tgggggggggggggggg"gggggggggggggggg&K gggggggggggggggg0!gggggggggggggggg"{;gggggggggggggggg{<gggggggggggggggg y{=gggggggggggggggg6rgggggggggggggggg#6sgggggggggggggggg6tgggggggggggggggg*6ugggggggggggggggg/gggggggggggggggg1gggggggggggggggg1Wgggggggggggggggg]2gggggggggggggggg]3gggggggggggggggg X]4gggggggggggggggg*=Dgggggggggggggggg:Egggggggggggggggg$Fgggggggggggggggg-cgggggggggggggggg.dggggggggggggggggUeggggggggggggggggfgggggggggggggggg#}>gggggggggggggggg>ggggggggggggggggF>gggggggggggggggg !gggggggggggggggg5"gggggggggggggggg #gggggggggggggggg!ejggggggggggggggggekggggggggggggggggXelgggggggggggggggg gggggggggggggggg%< gggggggggggggggg. gggggggggggggggg*A ggggggggggggggggۺggggggggggggggggۻgggggggggggggggg ۼggggggggggggggggZFggggggggggggggggFgggggggggggggggg.Fgggggggggggggggg)ewggggggggggggggggkxggggggggggggggggygggggggggggggggg#mggggggggggggggggPmggggggggggggggggBmggggggggggggggggamgggggggggggggggg!O(gggggggggggggggg!(gggggggggggggggg(gggggggggggggggg +gggggggggggggggg*Q,gggggggggggggggg-gggggggggggggggg}O1ggggggggggggggggO2gggggggggggggggg.2O3gggggggggggggggg&\ gggggggggggggggg gggggggggggggggg! gggggggggggggggg ugggggggggggggggg#ugggggggggggggggg'ugggggggggggggggg.0gggggggggggggggg1gggggggggggggggg*<1ggggggggggggggggu^gggggggggggggggg*_gggggggggggggggg`ggggggggggggggggWggggggggggggggggWgggggggggggggggg%OWgggggggggggggggg*gggggggggggggggg&gggggggggggggggg ggggggggggggggggj~ gggggggggggggggg ?~ gggggggggggggggg+~ gggggggggggggggg~ gggggggggggggggg'98gggggggggggggggg%99gggggggggggggggg29:gggggggggggggggg Ngggggggggggggggg ggggggggggggggggRgggggggggggggggg _gggggggggggggggg_gggggggggggggggg#_gggggggggggggggg-gggggggggggggggg..gggggggggggggggg/gggggggggggggggg1g0gggggggggggggggg a!gggggggggggggggg,b"gggggggggggggggg#gggggggggggggggg"$A_gggggggggggggggg0A`gggggggggggggggg<Aagggggggggggggggg+gggggggggggggggg)gggggggggggggggggggggggggggggggg!Ph1gggggggggggggggg$eh2gggggggggggggggg"h3gggggggggggggggg|h4gggggggggggggggg#zgggggggggggggggg#{ggggggggggggggggf#|gggggggggggggggg"?#}gggggggggggggggg#Gygggggggggggggggg3zgggggggggggggggg{gggggggggggggggg%Igggggggggggggggg'Igggggggggggggggg Igggggggggggggggg Igggggggggggggggg w/gggggggggggggggg0gggggggggggggggg*1gggggggggggggggg2gggggggggggggggg%pOgggggggggggggggg" pPggggggggggggggggvpQgggggggggggggggg1pRgggggggggggggggg+gggggggggggggggg)+gggggggggggggggg+gggggggggggggggg2 gggggggggggggggg&gggggggggggggggg ggggggggggggggggNgggggggggggggggg&Qgggggggggggggggg(Qgggggggggggggggg,Qgggggggggggggggg-Qgggggggggggggggg  Ngggggggggggggggg  Ogggggggggggggggg-k Pgggggggggggggggg QggggggggggggggggvxggggggggggggggggxggggggggggggggggTxgggggggggggggggg 3gggggggggggggggg! 3gggggggggggggggg3gggggggggggggggg'+3gggggggggggggggg! gggggggggggggggg gggggggggggggggg. gggggggggggggggg gggggggggggggggg*`Zogggggggggggggggg Zpgggggggggggggggg+ZqggggggggggggggggZrgggggggggggggggggggggggggggggggg=gggggggggggggggg)gggggggggggggggg/Ќgggggggggggggggg/Ѝgggggggggggggggg1Ўgggggggggggggggg"Џgggggggggggggggg/;gggggggggggggggg;gggggggggggggggg2N;gggggggggggggggg tmgggggggggggggggg'nggggggggggggggggogggggggggggggggg pgggggggggggggggg)bgggggggggggggggg%bgggggggggggggggg*bbgggggggggggggggg gggggggggggggggg( gggggggggggggggg$ggggggggggggggggrgggggggggggggggggggggggggggggggggggggggggggggggg#cgggggggggggggggg+dDgggggggggggggggg-DggggggggggggggggDggggggggggggggggDgggggggggggggggg,gggggggggggggggggggggggggggggggg"ggggggggggggggggQjgggggggggggggggg$`jggggggggggggggggCjgggggggggggggggg'jgggggggggggggggg1U&!ggggggggggggggggv&"gggggggggggggggg,\&#gggggggggggggggg xHgggggggggggggggg)Igggggggggggggggg+WJgggggggggggggggg16Y.'#3ZT)>LWxgggg wGgggg,[wGgggg &xggggl@wGgggg1MwGggggVSwGgggg&xgggg7wGgggg2s0xgggg)>wGggggxgggg 2fwGgggg1~xgggg1l92xgggg_xgggg,xgggg ?wGgggg1 xgggg1lPwGgggg 2#pxgggg Y!wGggggIxgggg1 auwGgggg2sBwGggggK wGgggg ?bxgggg xggggFggggg@ggggg+B)"ggggg+BQggggg OVggggg.Eugggggggggg9^ggggg`"ggggg+gggggxggggg@ggggg bggggg.E1%ggggg)Hg'93ggggg8ggggg0 _ggggg/bBggggg5 |[,~,%E=| z t:(\/,UmF$7" V2^Wm ?!?*+-I0PA  HXq:J2 a>Bi4 $ ;"M5J('ض, C"<jv  ;40.6d~|#w1/g#Q6Mg(hg]p'g&g Q *g [f+t"E PkMtQU7##f{ ,#P%X`$BoJ"71q^i'gggd$ggg*ggg"ggg*4|gggT=ggg,Toggg&wWgggggg&׷gggz$ggg 24ggggg~d4ggggg16oggggg"i`ggggg)>'4ggggg4ggggg)> ggggg 4ggggg14ggggg1o|4ggggg#,14ggggg'o 4ggggg~h-ggggg*wL4ggggg'-ggggg*ggggg&Qggggg1o Jggggg"i4ggggg 23ggggg ׬4ggggg Zmggggg#,Њgggggkggggg  ggggg gggggq4ggggg&z4gggggcggas"cmggR5"gggK '#b"ggdi(gg5/jCgg5XEgt8fg54!hagg Cihgg4n%/ggg4,%Thgg%Yclgg8(d8gg6Xhpgg3gg5Oigg8Tcgg8qj<gg*g+66ggg<3FgI8TiHgg5"eggA5a[gg5clgg 8 hgg$?jgg9DkFgg%5$M`gg:8)cgg8J eggS!h gg8iOgg9jgg7efgg ;k ggbgg4[cgg98&}cgg7|&eggXs&ggg6*&agg4*-apgg/{fgg8fGgg78thggq5v`ggD6wjBgg:7|g<gg7p`a gg[4glbgg69$g5@b~gg7gډ5ggg5F fgg Kcgg67!bgg /i<gg)5e"jlgg4dgg6j`dgg6Lwigg3b~gg5[ggg#fgg3'fgg*j'gX4U@hgg8KjggYeggy6^dggz6_c<gg8Pd8gg .jgg58hpgg6TeggQ5^Aggg6 kFgg+8}hggV5agg$6%dfgg`fgg5>`gg8$?fggOjgg7#)c~gg6bsgg4#Xihgg83dgg7?dgg7igg37Xg*ggy7Lgggl (ggg!egg7)%a9lyg8)0cgg7cggd 7igg8ih<ggmbTggm89f-ggU4"%fgg|7";agg7k"Jagg6gC4/`gg`gg8 bggJ5pg(57jggm8dggc6`ggG4fggcggk M[dgg3egg5tiEgg7*>j~gg4ap:g6fgg3g<gg8MndggW8#bgg4#g8g5a[gg84bgg8iggbgg4%c@gg6T%gNggd69%cgg6%`gg 0eggt4/(cgg%7ggg@6|fgg5`gg8 gM8g5qfgg@3cggN6`)agg5#!g}F6j! dgg`6!,kgg4eggw5$bgg%gZ6fggMfgg4u$cgg4ggg7'b;gg @')gq6**gcgg8Y`3ggm7l$f+gg7igg6%f-gg4\cgg8igg5 fgg8|g'ggfgg7bgg7Jgcgg66jeNgg c+gg4u"Zigg7v"lfggV"|fggl7%fggq7 %fggs4%jEggb7%igg7dzc9gg7jggT5%cggj3bgg43`ggU8!Ijlgg4<}`gg 5lfgg5(7kggY5&iggb8g.agg25(_aggB87]g47i)gggggt4agg8Kc@gg4hagg%6`gg5viOggn6%!Rdgg71g<gg47iyggj7 gggrh)gg8pgo*g Efgg*8g8+#b{ggi4' fgg88'Ehugg5('Kagg8<cggTigg63hpgg8Kcgg5h(gg&6kFgg5Z)c\gg6)dgg6)9g+d9)fYggI4Jegg4#j$ggC50g8b6x"!g,7"h?gg7fnbg8+"hMgg5cdqggP8-5 g{>`rggX5PAj~gg5[MkFgg"5k}gg25kFgg &k^ggk6fgg(c+gg.7.apggiiggW4} g^ g<gggC =Pfgg )Tihgg\5FRjggx g{cRgg4 Ehggg7fgg8XhggU7 'gM5bcgg52hgg4<T"g 5k 3igg7S Ai(gg5cgg@4 #kggN5cgg7etbLgg5kggd5'cgg4]0egg7i%hgg6q&cgg'6&fgg7l& eggY3&$iggp4)gNgg$4k)b:ggF7p)cbgg`7)a[gg6tggg3aggD cggg3fgg7ggg7Jdgg *jaggx5sjgg 8pigg 7jmlgX8Jagg ggg85`gg !igg4]`ggg59cgg5`gg7iOggP6fgg8fYgg4igg `ggd'dfgg8'oh(ggx4A'rgv6'agg5ajBggI6bKgg5*fgg@4`fgg4@b:n0g6yagg6}kigg4 kFgg.5j7gg6Gcgg8xgt8hgg5igg04KbggZ egg 0"aggO8xj7gga8+Đ`gg>7&Cdgg4"&Ohpgg5@&Zdggf8 'g D/fgg8 M?aQgg -GaSgg8H`3gg4:$g7kgg 1bcgg7(bgg8(hgg5ʢg0 7pbggh8|!d8ggB0bgg5,igg*9g>4B$i(gg 6!e!gg!ggg7Vdjgg4`ucIgg4 Yxggg8Oyf)ggffggyvhggg7"iLggl%fgg8:egg -Gegg 8JIagg7S$%g6$hgggl4$igg@4$ jggQ5$hpggR4+$bgg8hd#gg?6riggC6-fgg4L`rgg5jgg7gb6q*hgg16^iOgg6{fggtegg2 Legg7g ,hgg6-fgg7/`Igg56fgg B` `s4ggggg.cggggg?>ggggg A~ggggg'BHԃ  ``` ` ` ` `+` `3`=a#`4` `"` `5`2` a` `&`a`!a`.``@`` ` `a` ` ` ` `` a ` ``%` ` `D` ``` `I`G`F`)`` ` ` `/`$`` ` ``` `C`7`'` `*`0` `<`9` ` ` ` ` `Ea ` ` ` ` ``` `>`8`J`` ` `;` ``?`` `6` `(`,` `Ha1`B`-``A` ` ` ` `` `` ` ` ` ` ``:` ` `6QgU|g(k%Mr !$!fy-`,L5grg.8g+Tgeg%{g#_g]gg,>sgg e=g+sېg NFg+NNg+(g/gOg"ug0g27gWrg/g}g {9grg*_g .g!gA/gg,#IgOg(Isgp$g!-+gxwg2lg(brg1g '%g*e-CEg*eY@g/gR &g^bgxg#Hg Ng gS;gWg! ggg8Rggg+дggg,Tggg&5gggN<VF,'< m3' 0!-^D Z }G( 2*o%a"Ti!)$$(ߘ,S ^iM**`.[]p):. 1 ht,#$kR*(t& /3"4 z:5'+N G&'f4gg5ESgg7gg ?gg gg.Jgg2,ggbF-`[&l*c1kF'`2 0bM(M O|.#ԡL1f1n v2$(iX)4a*r&{]߻`0q &ycgggggg<=Nggg1ggg yggg"9ggg 'ggg2ggg kggg%tgggA/ggg$gggdggg&O|gggaggg*^ggg ^ggg8ggg3H"gggHXgggggg0nggg*wggg# ggg(2dggg gggGgggZ&ggg ggg(pמggg#^ggg!iggg?$ggg,ggg cggg&S|ggggggz gggOrgTg g!t{ g Ng\g/ g!>gge1gۄg qBg(gWfg$fg A#gCg+g%g&p g 'gg&.qgg7g*k2vg gwgmzgggdgg-'gg-lgg"tgg!|gg>)gg*ogg wCgggg7ץgg1ygg2zgg$D<g :g('7g!hg gxg(9ܻgng, 1g"jg-dLg 6g(g(ߓg#g,yg0gg$Dgg08gg_ggRggbXggEgwg1{g"gg'gag. g6g1g$ggg |g)8g/Hjg Ng6gpg<g,  g(9g(Gg!g :g-dgySg(egځ8E@[-;r=:gggeI=:ggg "T=:ggg'B=:ggg'{#=:ggg'=:ggg $=:gggb>=:ggg=:ggg1MA==:ggg&=:ggg6' _-2a (H`^HHHWWHHHHXrHHARHHHK[HHLRHDH_YHMHZ>cHHNHHHHHHKHJHCHH: GHRvHV;ZHH^"HHHFHJ :H_HEHH^_HHHHHF;mJvHHXHH9H9HP|DHH9+HH=HNHA<HHHH;HxOH]R,S=Cs>N\HHMDH:H;n:H:HC?HHH] ?`,HHW>H^T@\JHHH HHHHNUKPH\ -IHHCHVj9Y-HHHHHHHH;iHSHPAHHFH@,_MVIHH>FH>SHV9O>HD}R<H_SHHHHH< HU\UHPH&XBHHHHqXD<H%s5gg+M?gg {[gg Cgg/dgg&'>gg gg.Agg &Agg2A mi x.;Cj Lggjgg[0ggggYgg"}gg8gg_gg@gg|gggg#1gg.I\gg2&Sgg2bYggxgg*jlUgY7gg'*qgTg)Wxg 'g'g g"g 2^g$Vg\gzg gggeggg0 ggg ^ggg0ggg*aggg-/ggg  ggg3ggg 9ijggg*$gggNSfggg%ggg#T!D{pTm"NbxV sCggggggggqggggO>gggg4Agggg L1ggg-ggg%y0ggg2}ggg._ggg ggggggggghggg(#Eggg@Ioggg,p ggg2Bggg$ #ggg bnggg.ggg1GL1p:6-%\& u,F2H3!{mK%M()Nu 0&+0}-8_1<" xg!#+#N4IV2Tpm+w.n*Q2 0jxX3h0oZ()OMG ; ( bS&$CC|r1j{. mTw,zWQ'QHط%1gg#ugg'g)|gg/g'S]gIzgEggggttgg NJgggg58ggw_gg/dgg(`agg`&'F+%TNtu0":#'8%_xcX%Db^` h 7P /nMggggdfgggg$6Rggg.OӎRggg)ZRggg32иRggg% zRggg3RgggZRggg2">j5A&!7ggggqgQz+g"g)L{g#%g @tggv"Lgg$]:gg-75=gg`AK4"dKC"K_ }"KoK}=K}aKKYK.Z#[ A]  c Ak al80} Z J  0  [L  H  H     P] dC % .(  7 }U<  U Kd  ;g} 4 [Z Z  Z Z U1ZU:ZAZ AZ ZB[ Uu[B[' [-[0 {[] r Ar r! tr+ `r?2rR /r[  r_Yr r kr zr [)| P; )O U \Vj)z )} i )  >*  -t -z -|o- C- JS- ؋- ؎- J- } {E  Y) {.3 R5 ]|b}{l ܑxM  oH r H ow o  l  +(" o# ,$ q,%o3 ? EoI < <9 <; <>  U k >% >, v b K=b "ib nbv&b *cHc sc v[c+ (!c,vbc1 c2v~cS c_vce xct vc vc }cRcSz/o5zDz\ Sz`SzkUz P z %z z -RV SX ][ 9\]p ]t ]~  Z ] K  " ~ kz  25H  D5\ 5`5e gA5gS5ga5 5  5 v5 5DUD \O OV ,X ,(ipq,3}DْD٘ G٢ Dٺ Dپ D E 7aE  E z1S t zE  z]oO  zp,H  [") z.9: G  K ?vL  M JV ^ N{vD\WDfwDkDv9D ,9D D ,>D GD ?SD jD oD ?ZD1D ,oD ,qDD ?iDrrDD ,D NE NE E ڑ[ 8\ڲ\# =\8 \< \P \f f\o\r \[\\ 3\ \  L\ }\ v- RK C. J2 AF SG VI lfTiTw T|   jF  TR  ( Z6 U = PWr=o r] r| ;O r r ek ek.*k6 U>k: kD QkY kb f.k~_bk FAk_zk YB6 @;F YYU =[ Y{h @no  ҁ җ IҮYҸ Yһ r Y xv&x H& & & && [&4o&yK&4' $]' 'I' = N=@S= @X= @_= =Z=9= = @= @= @> > x O 9 y" gZ y  y^$  q.܍5yj6 0z; yy<  H! '% '3 *<( D *I;4q s  B9 k 4$`v c |D ( #L `XL L݌L `L 6L `M OM 0:M GM! `M0 &M< RMF `MJ Mn d: hdv8d} Ad Bd Ed Gd  d d XUd`d 73d YdfFd Kd d d GPm s Gk G} G ;! G l BK G G a P   Q 8  Q< !Q> $ s 8  < Q_ @   I ) R s` =sg Ksvs.s s -s .s /s ks gs/4s ՚s /@t t /Wt Iڠ dYګݘ Q@ d / 4  < . @D. ).).i. \/ ;A/ )/*,/+ |"/2 /T >./X :E BE E kE E EtE wFuF& F. F1 uF5 wFH уFU xF\}F^[QF_ CFl <: )  D# <^/N XNR Y ҧ[ <ej{ , :_ \ i Uo \a \ \ \ \ \ c 3F\ EU OU"U& OUV?4UXpUj Uz U{ U| MOU jGU-U NUTU XU NU 3lW 8-lu l| \l~ zl ]l@l;l GqlNlCXl jl l _lal$Elel]l hl Cl $^l :%m _m k {  vS{ c9"cV|  cK' ' *' X2( *( *(+ *(3 B(=+(> (H (a r(c !(g +1(m MY( ( H{ {b{ 0{v={c{ c{ c{ vP{vV{c'{ v^{ _<{ c:{ 9{ Ή{ c]| | ch| "| v|4| ՗|% ~|* |- "|7 c|= |Ov|P  $1 > ?M RSZ yAc &g -|' 2 |!v 6 p6'6 I6 6 b6֕6 J 6 ٛ7 M7٩7J^7- Jc72 7E7X x!7l 7|'NN N {N# 'N( N1 ϤNI X1NT *N[( Na;+N} tN (CN{N N |N +*`J7 L8 1P9 5ZE]*k rt or 1 Jm H & t  dg :  R U 2 r y H K Έ     ;T ! ]rk ]t]u ]w ]~ ] ] ]]v6] ] O] ] ]  ] ] ^ )^ P^! K^$^% fr^3wdt Vt NAtC4t twt .t NUt5t u>u wu wu wu*  .u- u5 uI x/uZ u\   +Dj?  A kCec! c  % V  c$ - 5@ftF^/ /1`0 1k0 _0" _0$ ִ0, 90.X000 _007 rm0e0f_x0t _0 .ӥ VoӪ&gӫ`NӴ YLӶ ς &H&g n w  D YQ 3V ?d-NR -VV ll]Ef ttiu" U MI ܚ y m  L>9?? P?# {?C W?N ?[ j4?q : ?x(? -IVm VnV-V R|V)V-V -V FV -W W W 1W  W, -W0 )Qm .z LM dh "f$ '  fg mMl     : FP;G^9eLe `eNf (%f f{f"M9f7 (f> +0fJ | | }# Y}M }`8}o}t }y>}} } '} } } g} 4! 4!# 4"!L 4?!` 4E!g 4L!m 4R!q 4X!w @!y4\!z s! s! 4n! }r!! wk8L8, l8>8? 8E8G K8c k`8j vf8o V8q8 98ys88 328c8 mx I !# $ 3 Gj: ־BggS `[8d tw ܂ g܈ ܉ >ܫ  ܰ A ,) z z JB%|z z z# [U, 5G* 7G7 GUG\ $G JG OGG 5G qG xG MG6^{_a_ 8P_a_' a_. a_= _P _U '#_  i W (0 @ ng) ;VZ !` Ci ClG ' tH H % ' 1 D HF \eW Ha Z %&" m m Hm m Im n n n zwn n! n)9n+,Yn0 Rn2Kn8An; InC 6nE nJVnL nni unkn:,n 5 / 1\ K - 07 ki_\|r0^Մ 0_Յ 0bՆ WՌ 0ռ 1R)N D)V @C)\ )ah)k h)u G)w)}h) $))$))l)h) V) $G) h) )i) L@# L@+ g@3 w@U,-@] @c \@h e@ij@| v@ 4J@ ҟ@ U@ fk@ mr t 77 7rw d m P P! " z&7z(=  g  7  @  % , <Z t[ $s\Ea fsbNO{ $O VO 6O ҆OO FFO RO pO @O7ZP P 7rP g tg% tg' gKzgL7gQgRgdhgk gl.gm gr gy+g Ng <g Ng g ')g Zg 2 ] ]  ] ]   ] Cy? F  X  Y  m  r ^* e W! r |"V ڒ"X  8"b<6"n "q  E 2 E  & ]. ڴE5{K5P(T2g o F#q 2yxz] 3 1   #WX X kBX X) kPX- koXO ktXV XW kXq Xx 5X{X >X LXHo?Qoz [o Ho o omo Ho@o܀o +"o Ioo o o I-oo  r 1ZRRxW  X8^-j 9o Rq 7r DyR R ^R R R s* \*8M* * * l* T* + \+5+k+# o+*jD+<jE+= v+I V+O!+P!8 9R 9r 9Κ Μ 9Ξ Φ rxα  G.   y/ osF=HZ +\ x e k qAt Gvow+Ry ~ 9 !"9 \9 !C9 !G9 94*9!l9 !u9 =9O9(: ): q<: >$: <P P iPψP xQ ? A D F S GT {U Gc;Gy |~  k 9  H gs  g| g +A R g RP`f`j Z`mb`p`{ ` ` ` _` ` mwc  wg Nwn wwr Nwz LwFwvgw Npw pw vkwNw Xmwgw cx x, Nx4 Nx5 nx v W 47sJ ٣ <  53 !2 C25q2 5r2 52  {2 |22 52 52 53  3 o3  $3,53@ ml p֟ ֤ od֬ n"ֹ !t snF PnT 2g K" Y&=   /  (18 AdE  bec 4  Xt uW  A U A OA UPA UWA AlB UB"UB, \B= BGBL jBQ)YN lYZ ;Y_ sYb Yd 2Yg Yj Y Y Y 34Y<, lm+ P;h &n &} & & ҩ & & & 4' My^%1S *1_  ( 0a 1 o Jk m թ4 0Cm'N  R.  R3 PRA -lRI  Rr#Rs'Rw R~  R c)R R ?R LRRR R R cR BR vR W%R Sldi 4i il{i i C5iiilj Djlj% lj6 sj: lj> mjO CjQjV   P  9 {  E#ME%4 :H S% g% g%$ S%1 V%<_%ES%G ?*%MS%] 4P%a %f 2%q "%x V%{T)% !%6y "y 2yE %yU > ykoyry|y6y >2 :K iX" j 8 j1) \ ;c ;g 3 @)34 q4 U4s|4 s4 s4; s4Q 4Y s4jna4s4 4 4 o4 1(Jgggt<g /g/!g ng*:Mg,/4g,|`V Kgg%oH=ggggS_ggiggs9gggggggggggggggggggggg ggggggggggggggggggggggggggggggggggggggggggggg-AggggggggggggggggggggggmggggOgggg ^gggggggg ]ggggSggggggggjkKmcpqPr HIJKL MON OPQRijknuqnuQyrs#t!u v wx yz{f|}~m n  qs=uvwy@pq:rs tuvxwxyz{5^? a : c   ei~cq~d~e~f~g~h~i~j789|?l@A- 01{23_456785f=>? @A BCDEFYGHI!<WXABCDE$%')2+0FGHIJKLMNOPQR.SbTU~~~~~~"~$~(~)~+~,~-~/~"STUVWXYZ[\]tuH|]}~abe$ Nl~ko~l ~m~n\~o~p7~q~r1~s9~t!/)*K-:~~~~8~~~~~~~j9G*c[Am FIJLABC  E G I JLPVq2a;u;>< ?!@"B#C$~_~6~~~~~~~~0>49:>@A]79%F!G"#$% &'()*NO}U^9:;<=>I?@ABCDE89=>@=CDGJKLMNOPQRSTU3ZF[G\H4IJ`KcLMeNMOfPgQR~~~~~~A~~~~~~VcWXYfZw$  O   ^p_`la}bbcddeeffhgihji/j3EnSTUM[%&'()(o5sw x!y"#}$~u~v~w~x~y ~z ~{ ~|9~}~~~~~~~V+Y,-\./01_2`3Y4^5d6f7{8oFGHIJKLMNOPQRst` zVWXYZ[\|STUrVW6XYZ[Vf[\]^_`abtcd~g~k~n~o~~g~klmnopqrstCPQSTUWZ[d '()+&.yz~7P~~/~~~<~~ ~ ~~~~~~~~ ~~~JLjiA`M~^bG%s !"#$%&'(i*s+,v-.{/|0~~~~4~~~~~~~~=%a&@'(|)D*&+F,I-K.w90:;3<4=>?,@ 6ST+UVW&XyYZ[r\]^_`abcde$ ]^_`Babcdef~G~H~I~J~K~L~M~N~O~P~Qd~R~S~T~U~V~W     Yefg[hijOk%lmnpopqrstuvmwx% uvwxyz{|}}~~)*+,F-./0)&gh\ij12]3456789I}KMNOQ/0^123#45678&9:;<~h~~~~~~~~~~~4A6B#C:DE=FGZ'1f2gh,i3j7k8lmn:o=p?q*V g!h(i)j<k,l-m.n0o ~X~Y"~Z~[#~\~]&~^(~_*~`~a.~b=yz{|}~+~~~~R~~ ~~h~~^&KloVrsmj_'NQW$STW~Cp.  L~1~~S~T~U~X~3~Z~_~~a~~XYQRWw'BD<~JMNR!"#$%&'{(})*+,-./"$123456789w:x;< :;<=>?@#~~~~z=>~?@ABCDEL}gggg ZLggg$&lggg P6)ggg#Pggg |ggg*W0gggF}ggg _ggg1Bggg->gggjggg"gggg,@#'gggUIRggg,gggpggg,ggg7Qggg ggg3dggg_ggg6Z$gggpCggg$ggg'ggg2nggg kggggUW4Ah6b6Zgggg0Igggg"hgggg gggg( 6gggg&V3gggg.ZUgggg rgggg QWgggg0[Wgggg1s'gggg0IT'gggg Q'gggg0dWgggg-~{9'gggg#~Wgggg'gggg0IEWgggg,]/'gggg1A'gggg*lFWgggg0>'gggg'gggg$>MWgggg ef'gggg%r۷'ggggF'gggg*t'gggg1VXWggggWgggg\('gggg!0|Wgggg ['gggg ?8Wgggg)>O-'gggg!0u'gggg Wgggg,Wgggg%rfWgggg ?'gggg 2A\'gggg1WggggPWgggg)>wKWgggg$>u'gggg!+Y'Wgggg!++'gggg ayWgggg0x'gggg 2BWgggg-~K%WggggWgggg\qWgggg#&'gggg'{bgggggg-gggggg)&Hgggggg">Ozgggg4>zgggg/ezgggg/ xggggBxgggg">Hsxgggg4 xggggAzgggg"@xgggg"ަzgggg&<g g1mmgdg ?Qg)dg+ZIg1gg;g("IgYg$Cgjggggblj'gg1L Ugggggg Lm@ggggggLزgggggg/ߣgggggg(/0Mgggggg)gggggg0[zߣgggggg[{Mgggggg)rgggggg "r8gggggg0rgggggg1gggggg Mggggggo.gggggg._.8gggggg/ZѺߣgggggggѻ+jgggggg gUgggggg'hm@ggggggoiزgggggg0<gggggg<+jgggggg TqggggggTr8gggggg._gggggg*+jgggggg$-gggggg =8gggggg&Dgggggg'cߣgggggg "c+jgggggggzgggggg)z8gggggg'gggggg+(Mgggggg'6%m@ggggggg6&زgggggg1SMgggggg'ggggggo8gggggg._gggggg$-E6Mgggggg'\gggggg/Z\8ggggggZ\gggggg =gggggg._Mgggggggggggg 8gggggggggggg "kߣggggggk+jggggggm@ggggggزgggggg%'Hߣgggggg$-'I+jgggggg'>Lggggggg>M8gggggg)>Ngggggg'wߣgggggg'x+jgggggg0Ugggggggggggg18gggggg)gggggg)MߣggggggaMgggggg1Segggggg'e8ggggggoeggggggo gggggg* sm@gggggg1S tزgggggg't5gggggggt6Mggggggiggggggj8gggggg kgggggg/|ggggggZ/}Mgggggg&DFUgggggg F8gggggg$-Fgggggg+gggggg%'gggggg'(8ggggggg)gggggg6$Ugggggg UMggggggCm@gggggg%mAزgggggg6ߣggggggZ7+jgggggg._(Ugggggg*(gggggg1S(8gggggg'(gggggg)|jߣgggggg |k+jggggggZUgggggg'gggggg7MggggggNUgggggg(/NggggggN8ggggggNgggggg% +jgggggg+ Qgggggg(/ Rزgggggg)^Qgggggg^RMgggggg)uwUgggggg%ux8gggggg'uygggggg'ggggggg0hMgggggg)0Ugggggg0m@gggggg0gggggg*ԉߣgggggg1Ԋ+jggggggo Ugggggg* 8gggggg1S gggggg(/?gggggg/Z?Mgggggg "WKgggggg0WL8ggggggo7ߣgggggg08+jgggggg |Ugggggg(/}8gggggg~gggggg&Dfߣgggggg._f+jgggggg$-}Uggggggo}m@gggggg._}زgggggg !gggggg'!Mggggggg8Ugggggg8gggggg%8gggggg1ߣgggggg+jgggggg =Jgggggg&DK8gggggg&DHgggggg'_Ugggggg0_m@gggggg*_gggggg)gggggg'Ugggggggm@gggggg)زgggggg'nߣgggggg =n+jggggggUgggggg+m@gggggg(/gggggg1S*%gggggg "*&Mgggggg/ZAggggggZA 8gggggg+A gggggg%BMgggggg'}Ugggggg&D~m@ggggggggggggg'P:MgggggggUgggggggm@gggggg gزgggggg/Z gggggg) Mgggggg1S# Ugggggg "#!m@gggggg0#"زgggggg =vߣggggggov+jgggggg1(gggggg))8gggggg "*gggggg(/2 ߣgggggg'2 +jggggggILUggggggZIMm@gggggg+INزgggggg{ߣgggggg|+jgggggg1Sm@gggggg'زgggggg Xߣgggggg+X+jgggggg%oUgggggg =om@gggggg&DpزgggggggggggggxLgggggg+jgggggg +kgggggg$-+l8gggggg =+mggggggggggggMgggggg,gggggg*Ugggggg)m@gggggg "زgggggg*:Dgggggg):EMgggggg%Qm@gggggg'Qزgggggg "gggggg(/ Ugggggg/Z m@ggggggZ زgggggg+aߣgggggg+xKUgggggg'xM8gggggg/ZxNgggggg1S\ߣgggggg)]+jgggggg$-3`m@gggggg =3aزgggggg$-Fߣgggggg'G+jgggggg(/m@ggggggزgggggg._Bߣgggggg*BMgggggg1Zm@gggggg)Zزgggggggggggg(/+jgggggg "?Ugggggg@8gggggg1Agggggg$-i/ggggggoi0Mgggggg'=m@gggggg/Z>زgggggg'$gggggg&D$Mgggggg0;gggggg*;زgggggg ߣgggggg ߤ+jgggggg m@gggggg$-زgggggg1JMgggggg =bEUgggggg._bFm@gggggg bGgggggggKߣgggggg&DL+jggggggm@gggggg1زggggggZqqߣgggggg)qr+jgggggg&Dرggggggزgggggg',Mgggggg'Cزgggggg ߣgggggg1S+jgggggg/ZeUgggggg)fm@ggggggZS*gggggg._jpgggggg jqزgggggg uggggggZ%gggggg+%8ggggggyߣgggggg/Zy+jggggggggggggزgggggg%4gggggg =4Mgggggg1gg$Z&gg_~,l gg @<gg(Hnggygg;ggPtgggggg6.ggggi gggg mggggp ggggWgggg)gggg;gggg0&*gggg0Bgggg"HD.gggg/jgggg eggggLwgggggggggggggggg /Lxgggggggggggggggg#LyggggggggggggggggLzgggggggggggggggg gggggggggggggggggggggggggggggggg-ggggggggggggggggns,gggggggggggggggg!s-gggggggggggggggg0<s.ggggggggggggggggl.{gggggggggggggggg$0.|gggggggggggggggg(.}gggggggggggggggg gggggggggggggggg$ggggggggggggggggNggggggggggggggggggggggggggggggggTggggggggggggggggTgggggggggggggggg.Tgggggggggggggggg"6gggggggggggggggg&K7gggggggggggggggg08gggggggggggggggg"{Rgggggggggggggggg{Sgggggggggggggggg y{Tgggggggggggggggg6gggggggggggggggg#6gggggggggggggggg6gggggggggggggggg*6gggggggggggggggg/gggggggggggggggg1gggggggggggggggg1Wgggggggggggggggg]Igggggggggggggggg]Jgggggggggggggggg X]Kgggggggggggggggg*=[gggggggggggggggg:\gggggggggggggggg$]gggggggggggggggg&zgggggggggggggggg.{ggggggggggggggggU|gggggggggggggggg}gggggggggggggggg#}>gggggggggggggggg>ggggggggggggggggF>gggggggggggggggg 8gggggggggggggggg59gggggggggggggggg :gggggggggggggggg!eggggggggggggggggeggggggggggggggggXegggggggggggggggg! gggggggggggggggg%< gggggggggggggggg. gggggggggggggggg*A gggggggggggggggggggggggggggggggggggggggggggggggg ggggggggggggggggZFggggggggggggggggFgggggggggggggggg.Fgggggggggggggggg)eggggggggggggggggkggggggggggggggggggggggggggggggggPmggggggggggggggggBmggggggggggggggggamgggggggggggggggg!O)gggggggggggggggg!)gggggggggggggggg)gggggggggggggggg Bgggggggggggggggg*QCggggggggggggggggDgggggggggggggggg}OHggggggggggggggggOIgggggggggggggggg.2OJgggggggggggggggg&\ gggggggggggggggg gggggggggggggggg! gggggggggggggggg ugggggggggggggggg#ugggggggggggggggg'ugggggggggggggggg.1gggggggggggggggg1gggggggggggggggg*<1gggggggggggggggguugggggggggggggggg*vggggggggggggggggwggggggggggggggggWggggggggggggggggWgggggggggggggggg%OWgggggggggggggggg*gggggggggggggggg&gggggggggggggggg ggggggggggggggggj~ gggggggggggggggg ?~!gggggggggggggggg+~"gggggggggggggggg~#gggggggggggggggg'9Ogggggggggggggggg%9Pgggggggggggggggg29Qgggggggggggggggg Ngggggggggggggggg ggggggggggggggggRgggggggggggggggg `gggggggggggggggg`gggggggggggggggg#`ggggggggggggggggDgggggggggggggggg.EggggggggggggggggFgggggggggggggggg1gGgggggggggggggggg a8gggggggggggggggg,b9gggggggggggggggg:gggggggggggggggg"$Avgggggggggggggggg0Awgggggggggggggggg<Axgggggggggggggggg+gggggggggggggggg)gggggggggggggggggggggggggggggggg!PhHgggggggggggggggg$ehIgggggggggggggggg"hJgggggggggggggggg|hKgggggggggggggggg#gggggggggggggggg#ggggggggggggggggf#gggggggggggggggg"?#gggggggggggggggg#Gސgggggggggggggggg3ޑggggggggggggggggޒgggggggggggggggg%Igggggggggggggggg'Igggggggggggggggg Igggggggggggggggg Igggggggggggggggg wFggggggggggggggggGgggggggggggggggg*HggggggggggggggggIgggggggggggggggg%pfgggggggggggggggg" pgggggggggggggggggvphgggggggggggggggg1pigggggggggggggggg+gggggggggggggggg)+gggggggggggggggg+gggggggggggggggg2 gggggggggggggggg&gggggggggggggggg ggggggggggggggggNggggggggggggggggRgggggggggggggggg(Rgggggggggggggggg,Rgggggggggggggggg-Rgggggggggggggggg  egggggggggggggggg  fgggggggggggggggg-k ggggggggggggggggg hggggggggggggggggvxggggggggggggggggxggggggggggggggggTxgggggggggggggggg 3gggggggggggggggg! 3gggggggggggggggg3gggggggggggggggg'+3gggggggggggggggg#"gggggggggggggggg#gggggggggggggggg.$gggggggggggggggg %gggggggggggggggg*`Zgggggggggggggggg Zgggggggggggggggg+ZggggggggggggggggZgggggggggggggggggggggggggggggggg=gggggggggggggggg)gggggggggggggggg tУgggggggggggggggg/Фgggggggggggggggg1Хgggggggggggggggg"Цgggggggggggggggg/;gggggggggggggggg;gggggggggggggggg2N;gggggggggggggggggggggggggggggggg'gggggggggggggggggggggggggggggggg gggggggggggggggg)bgggggggggggggggg%bgggggggggggggggg*bbgggggggggggggggg+d#gggggggggggggggg($gggggggggggggggg$%ggggggggggggggggr&gggggggggggggggggggggggggggggggggggggggggggggggg#cggggggggggggggggQD'gggggggggggggggg-D(ggggggggggggggggD)ggggggggggggggggD*gggggggggggggggg,gggggggggggggggggggggggggggggggg"gggggggggggggggg$`jggggggggggggggggCjgggggggggggggggg'jgggggggggggggggg1U&8ggggggggggggggggv&9gggggggggggggggg,\&:gggggggggggggggg x_gggggggggggggggg)`gggggggggggggggg+WaggggggggggggggggOggggxgggghLSh&ggggQ=Wxgggg xgggg 2'xgggg1xgggg ?Fh&ggggh-xgggg 2$h&gggg"njxgggg*uh&gggg0h&gggg*xggggUh&gggg1h&ggggQ}h&gggg090h&gggg+xggggH_xgggg Q_h&gggg/xgggg"h&gggg"nh&gggg h&gggg pDh&gggg)>#mh&gggg2mxgggg/Ih&gggg Qxgggg  rxgggg ?xgggg*צxgggg)>gxggggh&gggg_xgggg*bh&gggg0mxgggg_h&ggggzxgggg4F9_gggggu9_ggggg%1&"Mggggg%9_ggggg3"Mggggg39_ggggg4`#"Mggggg0H"Mggggg09_gggggb"MgggggS/.)gggggggggg# ggggg1E*gggggggggg'%t)ggggg /pggggg w^Eggggg[ggggg ?ggggg/!ggggg2*ggggg  ggggg%ggggg :9ggggg2Fi"ggggg $gggggJggggg1-,gggggV4ggggg <'-\ ) ^Xn ;H v .q)K $$(Bߪ CS0+|]uggg[ggg%ggg.7==ggg+ggg2dggg$l'ggg%u'ggg(ggg!NMggg }ggg#|gggdNggg&ggg.Nzggg-fggg&ggg-}nggg.w0ggg#g2Nggg/;ggg Yggg*~aYggg ggg#׉gggPBggg%cgggfggg-qgggQggg yggg G-%Lgggggggggggggggggg$Lgggggggggggggggggg"Lgggggggggggggggggg|Lgggggggggggggggggg.gggggggggggggggggggggggggggggggggggg ygggggggggggggggggg$[igggggggggggggggggg"rggggggggggggggggggrgggggggggggggggggg". gggggggggggggggggg1W. ggggggggggggggggggѨgggggggggggggggggg ^gggggggggggggggggg#_gggggggggggggggggg`gggggggggggggggggg5<gggggggggggggggggg/Tigggggggggggggggggg$Tjgggggggggggggggggg!ggggggggggggggggggggggggggggggggggggggggggggggggggggggcgggggggggggggggggg*=zggggggggggggggggggFzgggggggggggggggggg*`6gggggggggggggggggg.6gggggggggggggggggg-6gggggggggggggggggg*gggggggggggggggggg#}ggggggggggggggggggXggggggggggggggggggE#gggggggggggggggggg!O\ggggggggggggggggggT\gggggggggggggggggg!gggggggggggggggggg gggggggggggggggggg)kgggggggggggggggggggggggggggggggggggg%< gggggggggggggggggg  gggggggggggggggggg&K'5gggggggggggggggggg#G>Cgggggggggggggggggg>Dggggggggggggggggggfgggggggggggggggggg gggggggggggggggggg)ggggggggggggggggggBMwggggggggggggggggggeggggggggggggggggggegggggggggggggggggg*ggggggggggggggggggQ jggggggggggggggggggP kgggggggggggggggggg2N lgggggggggggggggggg`gggggggggggggggggg.2agggggggggggggggggg*Fgggggggggggggggggg*bFgggggggggggggggggggggggggggggggggggg gggggggggggggggggg'ggggggggggggggggggUgggggggggggggggggg&\m7gggggggggggggggggg#cm8ggggggggggggggggggv$ggggggggggggggggggv(gggggggggggggggggg(gggggggggggggggggg|Xgggggggggggggggggg gggggggggggggggggggggggggggggggggggg"ggggggggggggggggggU7ggggggggggggggggggZNgggggggggggggggggg Nggggggggggggggggggkgggggggggggggggggg Hgggggggggggggggggg,\ Igggggggggggggggggguogggggggggggggggggg2upgggggggggggggggggg+0gggggggggggggggggg ?0gggggggggggggggggg#0gggggggggggggggggg0gggggggggggggggggg3vgggggggggggggggggg gggggggggggggggggg%gggggggggggggggggg#gggggggggggggggggg NWCgggggggggggggggggg0<WDgggggggggggggggggg&gggggggggggggggggg)tgggggggggggggggggguggggggggggggggggggvggggggggggggggggggCf~gggggggggggggggggg%}gggggggggggggggggg.}ggggggggggggggggggN}gggggggggggggggggg}gggggggggggggggggg.8gggggggggggggggggg,b8gggggggggggggggggg8gggggggggggggggggg:ܹgggggggggggggggggg"$Bgggggggggggggggggg0CggggggggggggggggggGgggggggggggggggggg,_gggggggggggggggggg)_ggggggggggggggggggf_gggggggggggggggggg"?_gggggggggggggggggg#gggggggggggggggggg2 gggggggggggggggggg$eggggggggggggggggggggggggggggggggggggg*gggggggggggggggggg nggggggggggggggggggjgggggggggggggggggggggggggggggggggggg gggggggggggggggggg gggggggggggggggggg(LAgggggggggggggggggg XAgggggggggggggggggg,/ggggggggggggggggggtgggggggggggggggggg'ugggggggggggggggggg "ggggggggggggggggggvvgggggggggggggggggg1wgggggggggggggggggg1P(gggggggggggggggggg ggggggggggggggggggggggggggggggggggggggggggggggggggggggggg#gggggggggggggggggg" #gggggggggggggggggg #ggggggggggggggggggN#gggggggggggggggggg$0vgggggggggggggggggg)egggggggggggggggggg  gggggggggggggggggg1gggggggggggggggggg ICgggggggggggggggggg&IDgggggggggggggggggg-kIEggggggggggggggggggIFgggggggggggggggggghgggggggggggggggggg tgggggggggggggggggg(gggggggggggggggggg*AggggggggggggggggggXgggggggggggggggggg!Pogggggggggggggggggg ogggggggggggggggggg'+ogggggggggggggggggg*Qgggggggggggggggggg}+bgggggggggggggggggg.+cgggggggggggggggggggggggggggggggggggg! gggggggggggggggggggggggggggggggggggg+dQggggggggggggggggggQggggggggggggggggggaQgggggggggggggggggg.ggggggggggggggggggg w gggggggggggggggggg  gggggggggggggggggg" ggggggggggggggggggagggggggggggggggggguxCggggggggggggggggggxDgggggggggggggggggg!Jgggggggggggggggggg&3Wgggggggggggggggggg/3Xgggggggggggggggggg 3Ygggggggggggggggggg14gggggggggggggggggg/gggggggggggggggggg!gggggggggggggggggg.BrggggggggggggggggggZgggggggggggggggggg'ZggggggggggggggggggrZgggggggggggggggggggggggggggggggggggg'7gggggggggggggggggg%8gggggggggggggggggg*<9gggggggggggggggggg!3gggggggggggggggggg(4gggggggggggggggggg5gggggggggggggggggg;gggggggggggggggggg%O;gggggggggggggggggg)ߑgggggggggggggggggg#gggggggggggggggggg-gggggggggggggggggg'gggggggggggggggggg+Jgggggggggggggggggg ab=ggggggggggggggggggb>gggggggggggggggggg+b?ggggggggggggggggggb@gggggggggggggggggg:gggggggggggggggggg$`gggggggggggggggggg+Wggggggggggggggggggqagggggggggggggggggg1UةggggggggggggggggggRتgggggggggggggggggg,gggggggggggggggggg xCgggggggggggggggggg-Cgggggggggggggggggggggggggggggggggggg\gggggggggggggggggg /]gggggggggggggggggg^gggggggggggggggggg1g_gggggggggggggggggg&Sgggggggggggggggggg jhgggggggggggggggggg(jigggggggggggggggggg=bggggggggggggggggggn%gggggggggggggggggg<%gggggggggggggggggg0ygggggggggggggggggglgggggggggggggggggg.gggggggggggggggggg.Wcggggg1s۱gggg 2{4gggg&d{4gggg {4gggg ?۱gggg 2<۱gggg>۱gggg ۱gggg1{4gggg ?|{4gggg&۱gggg)>o {4gggg)>AV۱ggggת{4gggg8s@ggg+ggg,Tnggg&Agggr %/%:*z)i$gg&gd<^^ߑggg4&gd<^^ߒggg5&gfG^^ߓggg&gfE^^ߔggg&gf@^^ߗggg&gdQC^^ߘggg&gd_s^^ߙggg&gdE^^ߛggg]&gdO^^